From 343437316bc6845df9f77ba78389a9b60f3cb18b Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Thu, 25 Nov 2021 18:15:00 +0100 Subject: [PATCH] vkd3d: Add VKD3D_CONFIG option to force raw VA CBV descriptors. For certain ExecuteIndirect() uses, we're forced to use this path since we have no way to update push descriptors indirectly yet. Also, useful for testing performance deltas easily on NV while we're trying to figure out what is going on w.r.t. codegen. Signed-off-by: Hans-Kristian Arntzen --- include/vkd3d.h | 1 + libs/vkd3d/device.c | 1 + libs/vkd3d/state.c | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/vkd3d.h b/include/vkd3d.h index cd388e4f..8948b1f8 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -90,6 +90,7 @@ enum vkd3d_config_flags VKD3D_CONFIG_FLAG_BREADCRUMBS = 0x04000000, VKD3D_CONFIG_FLAG_PIPELINE_LIBRARY_APP_CACHE_ONLY = 0x08000000, VKD3D_CONFIG_FLAG_SHADER_CACHE_SYNC = 0x10000000, + VKD3D_CONFIG_FLAG_FORCE_RAW_VA_CBV = 0x20000000, }; typedef HRESULT (*PFN_vkd3d_signal_event)(HANDLE event); diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index da5339ca..a6b39a71 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -652,6 +652,7 @@ static const struct vkd3d_debug_option vkd3d_config_options[] = {"breadcrumbs", VKD3D_CONFIG_FLAG_BREADCRUMBS}, {"pipeline_library_app_cache", VKD3D_CONFIG_FLAG_PIPELINE_LIBRARY_APP_CACHE_ONLY}, {"shader_cache_sync", VKD3D_CONFIG_FLAG_SHADER_CACHE_SYNC}, + {"force_raw_va_cbv", VKD3D_CONFIG_FLAG_FORCE_RAW_VA_CBV}, }; static void vkd3d_config_flags_init_once(void) diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 8e70bc2d..df1d1df1 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -4676,7 +4676,8 @@ static uint32_t vkd3d_bindless_state_get_bindless_flags(struct d3d12_device *dev * The difference in performance is profound (~15% in some cases). * On ACO, BDA with NonWritable can be promoted directly to scalar loads, * which is great. */ - if (device_info->properties2.properties.vendorID != VKD3D_VENDOR_ID_NVIDIA) + if ((vkd3d_config_flags & VKD3D_CONFIG_FLAG_FORCE_RAW_VA_CBV) || + device_info->properties2.properties.vendorID != VKD3D_VENDOR_ID_NVIDIA) flags |= VKD3D_RAW_VA_ROOT_DESCRIPTOR_CBV; }