Mesa (main): radv: Add force_emulate_rt perftest option

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 4 12:16:03 UTC 2021


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

Author: Joshua Ashton <joshua at froggi.es>
Date:   Wed Sep 22 10:55:15 2021 +0100

radv: Add force_emulate_rt perftest option

Signed-off-by: Joshua Ashton <joshua at froggi.es>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12974>

---

 docs/envvars.rst                  | 3 +++
 src/amd/vulkan/radv_debug.h       | 1 +
 src/amd/vulkan/radv_device.c      | 1 +
 src/amd/vulkan/radv_pipeline.c    | 2 ++
 src/amd/vulkan/radv_pipeline_rt.c | 3 ++-
 src/amd/vulkan/radv_private.h     | 1 +
 6 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/docs/envvars.rst b/docs/envvars.rst
index 19267f74757..3669f907b04 100644
--- a/docs/envvars.rst
+++ b/docs/envvars.rst
@@ -702,6 +702,9 @@ RADV driver environment variables
       enable wave32 for compute shaders (GFX10+)
    ``dccmsaa``
       enable DCC for MSAA images
+   ``force_emulate_rt``
+      forces ray-tracing to be emulated in software,
+      even if there is hardware support.
    ``gewave32``
       enable wave32 for vertex/tess/geometry shaders (GFX10+)
    ``localbos``
diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index df50965ccb7..14b3a5160b1 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -76,6 +76,7 @@ enum {
    RADV_PERFTEST_SAM = 1u << 7,
    RADV_PERFTEST_RT = 1u << 8,
    RADV_PERFTEST_NGGC = 1u << 9,
+   RADV_PERFTEST_FORCE_EMULATE_RT = 1u << 10,
 };
 
 bool radv_init_trace(struct radv_device *device);
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 5a719bb1005..982603172dd 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -861,6 +861,7 @@ static const struct debug_control radv_perftest_options[] = {{"localbos", RADV_P
                                                              {"sam", RADV_PERFTEST_SAM},
                                                              {"rt", RADV_PERFTEST_RT},
                                                              {"nggc", RADV_PERFTEST_NGGC},
+                                                             {"force_emulate_rt", RADV_PERFTEST_FORCE_EMULATE_RT},
                                                              {NULL, 0}};
 
 const char *
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 7b4b981155c..0f49471059b 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -219,6 +219,8 @@ radv_get_hash_flags(const struct radv_device *device, bool stats)
 
    if (device->instance->perftest_flags & RADV_PERFTEST_NGGC)
       hash_flags |= RADV_HASH_SHADER_FORCE_NGG_CULLING;
+   if (device->instance->perftest_flags & RADV_PERFTEST_FORCE_EMULATE_RT)
+      hash_flags |= RADV_HASH_SHADER_FORCE_EMULATE_RT;
    if (device->physical_device->cs_wave_size == 32)
       hash_flags |= RADV_HASH_SHADER_CS_WAVE32;
    if (device->physical_device->ps_wave_size == 32)
diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c
index d46e74b8dbd..e7f558071b1 100644
--- a/src/amd/vulkan/radv_pipeline_rt.c
+++ b/src/amd/vulkan/radv_pipeline_rt.c
@@ -1877,7 +1877,8 @@ 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) {
+      if (device->physical_device->rad_info.chip_class >= GFX10_3
+       && !(device->instance->perftest_flags & RADV_PERFTEST_FORCE_EMULATE_RT)) {
          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 5453ccc8fd0..d9fb16d5e31 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1662,6 +1662,7 @@ struct radv_event {
 #define RADV_HASH_SHADER_FORCE_NGG_CULLING (1 << 13)
 #define RADV_HASH_SHADER_ROBUST_BUFFER_ACCESS (1 << 14)
 #define RADV_HASH_SHADER_ROBUST_BUFFER_ACCESS2 (1 << 15)
+#define RADV_HASH_SHADER_FORCE_EMULATE_RT (1 << 16)
 
 struct radv_pipeline_key;
 



More information about the mesa-commit mailing list