diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index ee4fc2ab787..b72e1091270 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -400,7 +400,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device *ext = (struct vk_device_extension_table){ .KHR_8bit_storage = true, .KHR_16bit_storage = true, - .KHR_acceleration_structure = !!(device->instance->perftest_flags & RADV_PERFTEST_RT), + .KHR_acceleration_structure = radv_enable_rt(device), .KHR_bind_memory2 = true, .KHR_buffer_device_address = true, .KHR_copy_commands2 = true, @@ -435,10 +435,8 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device .KHR_pipeline_executable_properties = true, .KHR_pipeline_library = !device->use_llvm, .KHR_push_descriptor = true, - .KHR_ray_query = - (device->instance->perftest_flags & RADV_PERFTEST_RT) && !device->use_llvm, - .KHR_ray_tracing_pipeline = - (device->instance->perftest_flags & RADV_PERFTEST_RT) && !device->use_llvm, + .KHR_ray_query = radv_enable_rt(device), + .KHR_ray_tracing_pipeline = radv_enable_rt(device), .KHR_relaxed_block_layout = true, .KHR_sampler_mirror_clamp_to_edge = true, .KHR_sampler_ycbcr_conversion = true, diff --git a/src/amd/vulkan/radv_nir_lower_ray_queries.c b/src/amd/vulkan/radv_nir_lower_ray_queries.c index 6284cb61492..09c829783d7 100644 --- a/src/amd/vulkan/radv_nir_lower_ray_queries.c +++ b/src/amd/vulkan/radv_nir_lower_ray_queries.c @@ -27,7 +27,6 @@ #include "util/hash_table.h" #include "radv_acceleration_structure.h" -#include "radv_debug.h" #include "radv_private.h" #include "radv_rt_common.h" #include "radv_shader.h" @@ -715,8 +714,7 @@ lower_rq_proceed(nir_builder *b, nir_ssa_def *index, struct ray_query_vars *vars bvh_node = nir_iadd(b, rq_load_var(b, index, vars->trav.bvh_base), nir_u2u(b, bvh_node, 64)); nir_ssa_def *intrinsic_result = NULL; - if (device->physical_device->rad_info.chip_class >= GFX10_3 && - !(device->instance->perftest_flags & RADV_PERFTEST_FORCE_EMULATE_RT)) { + if (!radv_emulate_rt(device->physical_device)) { intrinsic_result = nir_bvh64_intersect_ray_amd( b, 32, desc, nir_unpack_64_2x32(b, bvh_node), rq_load_var(b, index, vars->closest.t), rq_load_var(b, index, vars->trav.origin), diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index 2358a5a781a..22a22ec1e05 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -1472,8 +1472,7 @@ insert_traversal(struct radv_device *device, const VkRayTracingPipelineCreateInf bvh_node = nir_iadd(b, nir_load_var(b, trav_vars.bvh_base), nir_u2u(b, bvh_node, 64)); nir_ssa_def *intrinsic_result = NULL; - if (device->physical_device->rad_info.chip_class >= GFX10_3 - && !(device->instance->perftest_flags & RADV_PERFTEST_FORCE_EMULATE_RT)) { + if (!radv_emulate_rt(device->physical_device)) { intrinsic_result = nir_bvh64_intersect_ray_amd( b, 32, desc, nir_unpack_64_2x32(b, bvh_node), nir_load_var(b, vars->tmax), nir_load_var(b, trav_vars.origin), nir_load_var(b, trav_vars.dir), diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 49bb409ea8d..4f2581c33d8 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1760,6 +1760,10 @@ uint32_t radv_get_hash_flags(const struct radv_device *device, bool stats); bool radv_rt_pipeline_has_dynamic_stack_size(const VkRayTracingPipelineCreateInfoKHR *pCreateInfo); +bool radv_enable_rt(const struct radv_physical_device *pdevice); + +bool radv_emulate_rt(const struct radv_physical_device *pdevice); + #define RADV_STAGE_MASK ((1 << MESA_VULKAN_SHADER_STAGES) - 1) #define radv_foreach_stage(stage, stage_bits) \ diff --git a/src/amd/vulkan/radv_rt_common.c b/src/amd/vulkan/radv_rt_common.c index 358581b0c70..d30dbf21a88 100644 --- a/src/amd/vulkan/radv_rt_common.c +++ b/src/amd/vulkan/radv_rt_common.c @@ -21,9 +21,24 @@ * IN THE SOFTWARE. */ +#include "radv_debug.h" #include "radv_rt_common.h" #include "radv_acceleration_structure.h" +bool +radv_enable_rt(const struct radv_physical_device *pdevice) +{ + return (pdevice->instance->perftest_flags & RADV_PERFTEST_RT) && !pdevice->use_llvm; +} + +bool +radv_emulate_rt(const struct radv_physical_device *pdevice) +{ + assert(radv_enable_rt(pdevice)); + return pdevice->rad_info.chip_class < GFX10_3 || + (pdevice->instance->perftest_flags & RADV_PERFTEST_FORCE_EMULATE_RT); +} + void nir_sort_hit_pair(nir_builder *b, nir_variable *var_distances, nir_variable *var_indices, uint32_t chan_1, uint32_t chan_2)