diff --git a/docs/envvars.rst b/docs/envvars.rst
index 26faf2c8f02..fece46e794c 100644
--- a/docs/envvars.rst
+++ b/docs/envvars.rst
@@ -1235,6 +1235,8 @@ RADV driver environment variables
enable NGG streamout
``nggc``
enable NGG culling on GPUs where it's not enabled by default (GFX10.1 only).
+ ``rt``
+ enable rt pipelines whose implementation is still experimental.
``sam``
enable optimizations to move more driver internal objects to VRAM.
``rtwave64``
diff --git a/src/amd/ci/gitlab-ci.yml b/src/amd/ci/gitlab-ci.yml
index d9f29fe401d..6a44ac86141 100644
--- a/src/amd/ci/gitlab-ci.yml
+++ b/src/amd/ci/gitlab-ci.yml
@@ -373,6 +373,7 @@ vkcts-navi21-valve:
- .navi21-test-valve
variables:
GPU_VERSION: radv-navi21-aco
+ RADV_PERFTEST: rt
# Disabled due to its extremelly-broken nature
.vkcts-navi21-llvm-valve:
@@ -491,6 +492,7 @@ vkd3d-navi21-valve:
- .radv-valve-manual-rules
variables:
VKD3D_PROTON_RESULTS: radv-navi21-vkd3d
+ RADV_PERFTEST: rt
VKD3D_CONFIG: dxr11
vkd3d-vangogh-valve:
diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index dc78edac3e8..ea85539dc03 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -83,12 +83,13 @@ enum {
RADV_PERFTEST_GE_WAVE_32 = 1u << 5,
RADV_PERFTEST_NO_SAM = 1u << 6,
RADV_PERFTEST_SAM = 1u << 7,
- RADV_PERFTEST_NGGC = 1u << 8,
- RADV_PERFTEST_EMULATE_RT = 1u << 9,
- RADV_PERFTEST_RT_WAVE_64 = 1u << 10,
- RADV_PERFTEST_NGG_STREAMOUT = 1u << 11,
- RADV_PERFTEST_VIDEO_DECODE = 1u << 12,
- RADV_PERFTEST_DMA_SHADERS = 1u << 13,
+ RADV_PERFTEST_RT = 1u << 8,
+ RADV_PERFTEST_NGGC = 1u << 9,
+ RADV_PERFTEST_EMULATE_RT = 1u << 10,
+ RADV_PERFTEST_RT_WAVE_64 = 1u << 11,
+ RADV_PERFTEST_NGG_STREAMOUT = 1u << 12,
+ RADV_PERFTEST_VIDEO_DECODE = 1u << 13,
+ RADV_PERFTEST_DMA_SHADERS = 1u << 14,
};
bool radv_init_trace(struct radv_device *device);
diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
index 716241f9854..7be8b5a354a 100644
--- a/src/amd/vulkan/radv_instance.c
+++ b/src/amd/vulkan/radv_instance.c
@@ -96,6 +96,7 @@ static const struct debug_control radv_perftest_options[] = {
{"gewave32", RADV_PERFTEST_GE_WAVE_32},
{"nosam", RADV_PERFTEST_NO_SAM},
{"sam", RADV_PERFTEST_SAM},
+ {"rt", RADV_PERFTEST_RT},
{"nggc", RADV_PERFTEST_NGGC},
{"emulate_rt", RADV_PERFTEST_EMULATE_RT},
{"rtwave64", RADV_PERFTEST_RT_WAVE_64},
@@ -144,6 +145,7 @@ static const driOptionDescription radv_dri_options[] = {
DRI_CONF_RADV_FLUSH_BEFORE_QUERY_COPY(false)
DRI_CONF_RADV_ENABLE_UNIFIED_HEAP_ON_APU(false)
DRI_CONF_RADV_TEX_NON_UNIFORM(false)
+ DRI_CONF_RADV_RT(false)
DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(false)
DRI_CONF_RADV_RT_WAVE64(false)
DRI_CONF_RADV_APP_LAYER()
diff --git a/src/amd/vulkan/radv_rt_common.c b/src/amd/vulkan/radv_rt_common.c
index 1ef2ec502e3..415f86afbbf 100644
--- a/src/amd/vulkan/radv_rt_common.c
+++ b/src/amd/vulkan/radv_rt_common.c
@@ -38,8 +38,13 @@ radv_enable_rt(const struct radv_physical_device *pdevice, bool rt_pipelines)
if (pdevice->rad_info.gfx_level < GFX10_3 && !radv_emulate_rt(pdevice))
return false;
- if (rt_pipelines && pdevice->use_llvm)
- return false;
+ if (rt_pipelines) {
+ if (pdevice->use_llvm)
+ return false;
+
+ return (pdevice->instance->perftest_flags & RADV_PERFTEST_RT) ||
+ driQueryOptionb(&pdevice->instance->dri_options, "radv_rt");
+ }
return true;
}
diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf
index 904003462bf..7ff99aad5d8 100644
--- a/src/util/00-radv-defaults.conf
+++ b/src/util/00-radv-defaults.conf
@@ -113,6 +113,7 @@ Application bugs worked around in this file:
+
@@ -143,6 +144,14 @@ Application bugs worked around in this file:
+
+
+
+
+
+
+
+
diff --git a/src/util/driconf.h b/src/util/driconf.h
index 2152b9603f1..ab7aa2c6553 100644
--- a/src/util/driconf.h
+++ b/src/util/driconf.h
@@ -637,6 +637,10 @@
DRI_CONF_OPT_B(radv_tex_non_uniform, def, \
"Always mark texture sample operations as non-uniform.")
+#define DRI_CONF_RADV_RT(def) \
+ DRI_CONF_OPT_B(radv_rt, def, \
+ "Expose support for VK_KHR_ray_tracing_pipeline")
+
#define DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(def) \
DRI_CONF_OPT_B(radv_flush_before_timestamp_write, def, \
"Wait for previous commands to finish before writing timestamps")