radv: introduce RADV_EXPERIMENTAL envvar for experimental features

Abusing RADV_PERFTEST for experimental features doesn't make real
sense, and I think we should stop doing that.

The existing RADV_PERFTEST options like RADV_PERFTEST=transfer_queue
still exists but they are marked as deprecated, they will be removed
in future Mesa releases.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40646>
This commit is contained in:
Samuel Pitoiset 2026-03-26 11:23:42 +01:00 committed by Marge Bot
parent 83a7357d6a
commit 3324abad06
13 changed files with 91 additions and 35 deletions

View file

@ -72,4 +72,4 @@ Consider recording a [GFXReconstruct](https://github.com/LunarG/gfxreconstruct/b
Does the issue reproduce with the LLVM backend (`RADV_DEBUG=llvm`) or on the AMDGPU-PRO drivers?
Does your environment set any of the variables `ACO_DEBUG`, `RADV_DEBUG`, and `RADV_PERFTEST`?
Does your environment set any of the variables `ACO_DEBUG`, `RADV_DEBUG`, `RADV_PERFTEST` and `RADV_EXPERIMENTAL`?

View file

@ -1557,21 +1557,14 @@ RADV driver environment variables
a comma-separated list of named flags, which do various things:
``bfloat16``
enable bfloat16 cooperative matrix support on GFX11-11.5
``cswave32``
enable wave32 for compute shaders (GFX10+)
``dccmsaa``
enable DCC for MSAA images
``dmashaders``
upload shaders to invisible VRAM (might be useful for non-resizable BAR systems)
``emulate_rt``
forces ray-tracing to be emulated in software on GFX10_3+ and enables
rt extensions with older hardware.
``gewave32``
enable wave32 for vertex/tess/geometry shaders (GFX10+)
``hic``
enable experimental implementation of VK_EXT_host_image_copy (GFX10+)
``localbos``
enable local BOs
``lowlatencydec``
@ -1594,6 +1587,22 @@ RADV driver environment variables
enable wave64 for ray tracing shaders (GFX10+)
``sam``
enable optimizations to move more driver internal objects to VRAM.
Note that bfloat16, emulate_rt, hic, sparse, transfer_queue, video_decode
and video_encode are deprecated and RADV_EXPERIMENTAL should be
used instead.
.. envvar:: RADV_EXPERIMENTAL
a comma-separated list of named flags, which do various things:
``bfloat16``
enable bfloat16 cooperative matrix support on GFX11-11.5
``emulate_rt``
forces ray-tracing to be emulated in software on GFX10_3+ and enables
rt extensions with older hardware.
``hic``
enable experimental implementation of VK_EXT_host_image_copy (GFX10+)
``sparse``
enable experimental sparse binding and sparse residency on GPUs where we don't support it by default (pre Polaris)
``transfer_queue``

View file

@ -201,7 +201,7 @@ radv-polaris10-vkcts-full:
CI_TRON_TIMEOUT__BOOT_CYCLE__RETRIES: 4
CI_TRON_TIMEOUT__BOOT_CYCLE__MINUTES: 70
CI_TRON_TIMEOUT__OVERALL__MINUTES: 90
RADV_PERFTEST: video_decode,video_encode
RADV_EXPERIMENTAL: video_decode,video_encode
radv_enable_float16_gfx8: true
radv-vega10-vkcts-full:
@ -212,7 +212,7 @@ radv-vega10-vkcts-full:
timeout: 1h 15m
variables:
CI_TRON_TIMEOUT__OVERALL__MINUTES: 70
RADV_PERFTEST: transfer_queue,video_decode,video_encode
RADV_EXPERIMENTAL: transfer_queue,video_decode,video_encode
radv-renoir-vkcts-full:
extends:
@ -222,7 +222,7 @@ radv-renoir-vkcts-full:
timeout: 2h 15m
variables:
CI_TRON_TIMEOUT__OVERALL__MINUTES: 130
RADV_PERFTEST: transfer_queue
RADV_EXPERIMENTAL: transfer_queue
FDO_CI_CONCURRENT: 12 # HACK: Reduce the memory pressure
radv-navi10-vkcts-full:
@ -232,7 +232,7 @@ radv-navi10-vkcts-full:
- .navi10-test-valve-kws
- .radv-valve-manual-rules
variables:
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
radv-navi21-vkcts:
timeout: 35m
@ -243,7 +243,7 @@ radv-navi21-vkcts:
- .radv-valve-rules
variables:
CI_TRON_TIMEOUT__OVERALL__MINUTES: 30
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
radv-navi21-vkcts-full:
timeout: 50m
@ -253,7 +253,7 @@ radv-navi21-vkcts-full:
- .radv-valve-manual-rules
variables:
CI_TRON_TIMEOUT__OVERALL__MINUTES: 45
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
radv-vangogh-vkcts-full:
parallel: 2
@ -263,7 +263,7 @@ radv-vangogh-vkcts-full:
- .radv-valve-manual-rules
timeout: 90m
variables:
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
CI_TRON_TIMEOUT__OVERALL__MINUTES: 89
radeonsi-vangogh-glcts:
@ -297,7 +297,7 @@ radv-raphael-vkcts-full:
timeout: 45m
variables:
CI_TRON_TIMEOUT__OVERALL__MINUTES: 40
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
radv-navi31-vkcts:
timeout: 25m
@ -308,7 +308,7 @@ radv-navi31-vkcts:
- .radv-valve-rules
variables:
RADV_DEBUG: nomeshshader # Disable mesh shaders until task shaders stop hanging
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
CI_TRON_TIMEOUT__OVERALL__MINUTES: 20
radv-navi31-vkcts-full:
@ -318,7 +318,7 @@ radv-navi31-vkcts-full:
- .navi31-test-valve
- .radv-valve-manual-rules
variables:
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
CI_TRON_TIMEOUT__OVERALL__MINUTES: 25
radv-gfx1201-vkcts:
@ -331,7 +331,7 @@ radv-gfx1201-vkcts:
variables:
# TODO: Verify that task shaders don't hang.
RADV_DEBUG: nomeshshader
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
CI_TRON_TIMEOUT__OVERALL__MINUTES: 20
radv-gfx1201-vkcts-full:
@ -341,7 +341,7 @@ radv-gfx1201-vkcts-full:
- .gfx1201-test-valve
- .radv-valve-manual-rules
variables:
RADV_PERFTEST: transfer_queue,hic
RADV_EXPERIMENTAL: transfer_queue,hic
CI_TRON_TIMEOUT__OVERALL__MINUTES: 30
radv-gfx1201-fluster:

View file

@ -1,4 +1,4 @@
# RADV_PERFTEST=video_decode,video_encode expected failures.
# RADV_EXPERIMENTAL=video_decode,video_encode expected failures.
dEQP-VK.video.synchronization.decode_h264.basic.event.device_set_reset,Fail
dEQP-VK.video.synchronization.decode_h265.basic.event.device_set_reset,Fail
dEQP-VK.video.synchronization2.decode_h264.basic.event.device_set_reset,Fail

View file

@ -1,4 +1,4 @@
# RADV_PERFTEST=transfer_queue+vk_require_etc2=true regressions since 3d803d7a2e0e7d46c04381896168c344d59d88e4
# RADV_EXPERIMENTAL=transfer_queue+vk_require_etc2=true regressions since 3d803d7a2e0e7d46c04381896168c344d59d88e4
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_2_layers,Fail
dEQP-VK.api.copy_and_blit.copy_commands2.image_to_buffer_transfer_queue.2d_images.mip_copies_eac_r11_snorm_block_64x192_5_layers,Fail

View file

@ -1,4 +1,4 @@
# RADV_PERFTEST=video_decode,video_encode expected failures.
# RADV_EXPERIMENTAL=video_decode,video_encode expected failures.
dEQP-VK.video.synchronization.decode_h264.basic.event.device_set_reset,Fail
dEQP-VK.video.synchronization.decode_h265.basic.event.device_set_reset,Fail
dEQP-VK.video.synchronization2.decode_h264.basic.event.device_set_reset,Fail

View file

@ -78,6 +78,9 @@ enum {
RADV_DEBUG_DUMP_NIR | RADV_DEBUG_DUMP_ASM | RADV_DEBUG_DUMP_BACKEND_IR,
};
/* emulate_rt, video_decode, transfer_queue, video_encode, hic, sparse and bfloat16 are deprecated,
* use RADV_EXPERIMENTAL instead.
*/
enum {
RADV_PERFTEST_LOCAL_BOS = 1u << 0,
RADV_PERFTEST_DCC_MSAA = 1u << 1,
@ -103,6 +106,16 @@ enum {
RADV_PERFTEST_LOWLATENCYENC = 1u << 21,
};
enum {
RADV_EXPERIMENTAL_EMULATE_RT = 1u << 0,
RADV_EXPERIMENTAL_VIDEO_DECODE = 1u << 1,
RADV_EXPERIMENTAL_TRANSFER_QUEUE = 1u << 2,
RADV_EXPERIMENTAL_VIDEO_ENCODE = 1u << 3,
RADV_EXPERIMENTAL_HIC = 1u << 4,
RADV_EXPERIMENTAL_SPARSE = 1u << 5,
RADV_EXPERIMENTAL_BFLOAT16 = 1u << 6,
};
enum {
RADV_TRAP_EXCP_MEM_VIOL = 1u << 0,
RADV_TRAP_EXCP_FLOAT_DIV_BY_ZERO = 1u << 1,

View file

@ -129,6 +129,17 @@ static const struct debug_control radv_perftest_options[] = {
{NULL, 0},
};
static const struct debug_control radv_experimental_options[] = {
{"emulate_rt", RADV_EXPERIMENTAL_EMULATE_RT},
{"video_decode", RADV_EXPERIMENTAL_VIDEO_DECODE},
{"transfer_queue", RADV_EXPERIMENTAL_TRANSFER_QUEUE},
{"video_encode", RADV_EXPERIMENTAL_VIDEO_ENCODE},
{"hic", RADV_EXPERIMENTAL_HIC},
{"sparse", RADV_EXPERIMENTAL_SPARSE},
{"bfloat16", RADV_EXPERIMENTAL_BFLOAT16},
{NULL, 0},
};
static const struct debug_control radv_trap_excp_options[] = {
{"mem_viol", RADV_TRAP_EXCP_MEM_VIOL},
{"float_div_by_zero", RADV_TRAP_EXCP_FLOAT_DIV_BY_ZERO},
@ -377,6 +388,27 @@ radv_parse_pstate(const char *str)
}
}
static void
radv_convert_perftest_to_experimental(struct radv_instance *instance)
{
#define CONVERT(name, flag) \
if (instance->perftest_flags & RADV_PERFTEST_##flag) { \
fprintf(stderr, "radv: RADV_PERFTEST=" #name " is deprecated and will be removed in future Mesa releases. " \
"Please use RADV_EXPERIMENTAL=" #name " instead.\n"); \
instance->experimental_flags |= RADV_EXPERIMENTAL_##flag; \
}
CONVERT(emulate_rt, EMULATE_RT);
CONVERT(video_decode, VIDEO_DECODE);
CONVERT(video_encode, VIDEO_ENCODE);
CONVERT(transfer_queue, TRANSFER_QUEUE);
CONVERT(hic, HIC);
CONVERT(sparse, SPARSE);
CONVERT(bfloat16, BFLOAT16);
#undef CONVERT
}
VKAPI_ATTR VkResult VKAPI_CALL
radv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
VkInstance *pInstance)
@ -414,6 +446,7 @@ radv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationC
instance->debug_flags = parse_debug_string(os_get_option("RADV_DEBUG"), radv_debug_options);
instance->perftest_flags = parse_debug_string(os_get_option("RADV_PERFTEST"), radv_perftest_options);
instance->experimental_flags = parse_debug_string(os_get_option("RADV_EXPERIMENTAL"), radv_experimental_options);
instance->trap_excp_flags = parse_debug_string(os_get_option("RADV_TRAP_HANDLER_EXCP"), radv_trap_excp_options);
instance->profile_pstate = radv_parse_pstate(debug_get_option("RADV_PROFILE_PSTATE", "peak"));
@ -452,6 +485,7 @@ radv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationC
VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false));
radv_convert_perftest_to_experimental(instance);
radv_init_dri_options(instance);
*pInstance = radv_instance_to_handle(instance);

View file

@ -99,6 +99,7 @@ struct radv_instance {
uint64_t debug_flags;
uint64_t perftest_flags;
uint64_t experimental_flags;
uint64_t trap_excp_flags;
enum radeon_ctx_pstate profile_pstate;

View file

@ -89,8 +89,7 @@ radv_sparse_enabled(const struct radv_physical_device *pdev)
{
const struct radv_instance *instance = radv_physical_device_instance(pdev);
return pdev->info.has_sparse ||
(instance->perftest_flags & RADV_PERFTEST_SPARSE);
return pdev->info.has_sparse || (instance->experimental_flags & RADV_EXPERIMENTAL_SPARSE);
}
bool
@ -100,7 +99,7 @@ radv_transfer_queue_enabled(const struct radv_physical_device *pdev)
/* Check if the GPU has SDMA support and transfer queues are allowed. */
if (pdev->info.sdma_ip_version == SDMA_UNKNOWN || !pdev->info.ip[AMD_IP_SDMA].num_queues ||
!(instance->perftest_flags & RADV_PERFTEST_TRANSFER_QUEUE))
!(instance->experimental_flags & RADV_EXPERIMENTAL_TRANSFER_QUEUE))
return false;
if (!pdev->info.has_gang_submit || !radv_compute_queue_enabled(pdev))
@ -187,7 +186,7 @@ radv_bfloat16_enabled(const struct radv_physical_device *pdev)
return false;
/* GFX11-11.5 has precision issues. */
return (instance->perftest_flags & RADV_PERFTEST_BFLOAT16) || pdev->info.gfx_level >= GFX12;
return (instance->experimental_flags & RADV_EXPERIMENTAL_BFLOAT16) || pdev->info.gfx_level >= GFX12;
}
static bool
@ -206,7 +205,7 @@ bool
radv_host_image_copy_enabled(const struct radv_physical_device *pdev)
{
const struct radv_instance *instance = radv_physical_device_instance(pdev);
return pdev->info.gfx_level >= GFX10 && (instance->perftest_flags & RADV_PERFTEST_HIC);
return pdev->info.gfx_level >= GFX10 && (instance->experimental_flags & RADV_EXPERIMENTAL_HIC);
}
bool
@ -225,7 +224,7 @@ bool
radv_emulate_rt(const struct radv_physical_device *pdev)
{
const struct radv_instance *instance = radv_physical_device_instance(pdev);
if (instance->perftest_flags & RADV_PERFTEST_EMULATE_RT)
if (instance->experimental_flags & RADV_EXPERIMENTAL_EMULATE_RT)
return true;
/* Do not force emulated RT on GPUs that have native support. */

View file

@ -240,7 +240,7 @@ radv_probe_video_decode(struct radv_physical_device *pdev)
/* WRITE_MEMORY is needed for SetEvent and is required to pass CTS */
pdev->video_decode_enabled = radv_video_write_memory_supported(pdev);
if (instance->perftest_flags & RADV_PERFTEST_VIDEO_DECODE) {
if (instance->experimental_flags & RADV_EXPERIMENTAL_VIDEO_DECODE) {
pdev->video_decode_enabled = true;
}
}

View file

@ -79,7 +79,7 @@ radv_probe_video_encode(struct radv_physical_device *pdev)
return;
}
pdev->video_encode_enabled = !!(instance->perftest_flags & RADV_PERFTEST_VIDEO_ENCODE);
pdev->video_encode_enabled = !!(instance->experimental_flags & RADV_EXPERIMENTAL_VIDEO_ENCODE);
}
void

View file

@ -266,7 +266,7 @@ zink-radv-navi10-valve:
HWCI_START_WESTON: 1
CI_TRON_TIMEOUT__OVERALL__MINUTES: 30
GPU_VERSION: zink-radv-navi10
RADV_PERFTEST: hic
RADV_EXPERIMENTAL: hic
zink-radv-vangogh-valve:
timeout: 35m
@ -283,7 +283,7 @@ zink-radv-vangogh-valve:
CI_TRON_TIMEOUT__BOOT_CYCLE__MINUTES: 30
CI_TRON_TIMEOUT__OVERALL__MINUTES: 30
FDO_CI_CONCURRENT: 6
RADV_PERFTEST: hic
RADV_EXPERIMENTAL: hic
zink-radv-vangogh-traces:
extends:
@ -307,7 +307,7 @@ zink-radv-navi31-valve:
HWCI_START_WESTON: 1
GPU_VERSION: zink-radv-navi31
CI_TRON_TIMEOUT__OVERALL__MINUTES: 10
RADV_PERFTEST: hic
RADV_EXPERIMENTAL: hic
zink-radv-cezanne:
extends:
@ -333,7 +333,7 @@ zink-radv-gfx1201-valve:
HWCI_START_WESTON: 1
GPU_VERSION: zink-radv-gfx1201
CI_TRON_TIMEOUT__OVERALL__MINUTES: 10
RADV_PERFTEST: hic
RADV_EXPERIMENTAL: hic
zink-radv-gfx1201-traces:
extends: