Mesa (main): radv: Refactor ray tracing support checks

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 12 16:31:28 UTC 2022


Module: Mesa
Branch: main
Commit: 521492e8b163bf8d1e9d12ef22965ea3d51a0681
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=521492e8b163bf8d1e9d12ef22965ea3d51a0681

Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date:   Mon Apr 11 18:11:26 2022 +0200

radv: Refactor ray tracing support checks

Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15860>

---

 src/amd/vulkan/radv_device.c                |  8 +++-----
 src/amd/vulkan/radv_nir_lower_ray_queries.c |  4 +---
 src/amd/vulkan/radv_pipeline_rt.c           |  3 +--
 src/amd/vulkan/radv_private.h               |  4 ++++
 src/amd/vulkan/radv_rt_common.c             | 15 +++++++++++++++
 5 files changed, 24 insertions(+), 10 deletions(-)

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)



More information about the mesa-commit mailing list