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

Author: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Date:   Tue Jan  9 08:46:19 2024 +0100

radv: query drirc options in only one place

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26946>

---

 src/amd/vulkan/radv_instance.c        | 14 ++++++++++++++
 src/amd/vulkan/radv_physical_device.c | 28 ++++++++++------------------
 src/amd/vulkan/radv_private.h         |  7 +++++++
 3 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
index c0877f53ce1..71680241a44 100644
--- a/src/amd/vulkan/radv_instance.c
+++ b/src/amd/vulkan/radv_instance.c
@@ -231,6 +231,20 @@ radv_init_dri_options(struct radv_instance *instance)
       driQueryOptioni(&instance->dri_options, 
"radv_override_compute_shader_version");
    instance->override_ray_tracing_shader_version =
       driQueryOptioni(&instance->dri_options, 
"radv_override_ray_tracing_shader_version");
+
+   instance->enable_dgc = driQueryOptionb(&instance->dri_options, "radv_dgc");
+
+   instance->override_vram_size = driQueryOptioni(&instance->dri_options, 
"override_vram_size");
+
+   instance->enable_khr_present_wait = driQueryOptionb(&instance->dri_options, 
"vk_khr_present_wait");
+
+   instance->override_uniform_offset_alignment =
+      driQueryOptioni(&instance->dri_options, 
"radv_override_uniform_offset_alignment");
+
+   instance->report_llvm9_version_string = 
driQueryOptionb(&instance->dri_options, "radv_report_llvm9_version_string");
+
+   instance->vk_require_etc2 = driQueryOptionb(&instance->dri_options, 
"vk_require_etc2");
+   instance->vk_require_astc = driQueryOptionb(&instance->dri_options, 
"vk_require_astc");
 }
 
 static const struct vk_instance_extension_table 
radv_instance_extensions_supported = {
diff --git a/src/amd/vulkan/radv_physical_device.c 
b/src/amd/vulkan/radv_physical_device.c
index b797bc61eb6..d77a3d0f0c2 100644
--- a/src/amd/vulkan/radv_physical_device.c
+++ b/src/amd/vulkan/radv_physical_device.c
@@ -88,12 +88,6 @@ radv_vrs_attachment_enabled(const struct 
radv_physical_device *pdevice)
    return pdevice->rad_info.gfx_level >= GFX11 || 
!(pdevice->instance->debug_flags & RADV_DEBUG_NO_HIZ);
 }
 
-static bool
-radv_NV_device_generated_commands_enabled(const struct radv_physical_device 
*device)
-{
-   return driQueryOptionb(&device->instance->dri_options, "radv_dgc");
-}
-
 static bool
 radv_calibrated_timestamps_enabled(const struct radv_physical_device *pdevice)
 {
@@ -230,7 +224,7 @@ enum radv_heap {
 static uint64_t
 radv_get_adjusted_vram_size(struct radv_physical_device *device)
 {
-   int ov = driQueryOptioni(&device->instance->dri_options, 
"override_vram_size");
+   int ov = device->instance->override_vram_size;
    if (ov >= 0)
       return MIN2((uint64_t)device->rad_info.vram_size_kb * 1024, (uint64_t)ov 
<< 20);
    return (uint64_t)device->rad_info.vram_size_kb * 1024;
@@ -481,9 +475,9 @@ radv_physical_device_get_supported_extensions(const struct 
radv_physical_device
        * but the feature is useful enough to hide behind an opt-in mechanism 
for now.
        * If the instance only enables surface extensions that unconditionally 
support present wait,
        * we can also expose the extension that way. */
-      .KHR_present_id = driQueryOptionb(&device->instance->dri_options, 
"vk_khr_present_wait") ||
+      .KHR_present_id = device->instance->enable_khr_present_wait ||
                         
wsi_common_vk_instance_supports_present_wait(&device->instance->vk),
-      .KHR_present_wait = driQueryOptionb(&device->instance->dri_options, 
"vk_khr_present_wait") ||
+      .KHR_present_wait = device->instance->enable_khr_present_wait ||
                           
wsi_common_vk_instance_supports_present_wait(&device->instance->vk),
       .KHR_push_descriptor = true,
       .KHR_ray_query = radv_enable_rt(device, false),
@@ -609,7 +603,7 @@ radv_physical_device_get_supported_extensions(const struct 
radv_physical_device
       .EXT_tooling_info = true,
       .EXT_transform_feedback = true,
       .EXT_vertex_attribute_divisor = true,
-      .EXT_vertex_input_dynamic_state = !device->use_llvm && 
!radv_NV_device_generated_commands_enabled(device),
+      .EXT_vertex_input_dynamic_state = !device->use_llvm && 
!device->instance->enable_dgc,
       .EXT_ycbcr_image_arrays = true,
       .AMD_buffer_marker = true,
       .AMD_device_coherent_memory = true,
@@ -638,8 +632,8 @@ radv_physical_device_get_supported_extensions(const struct 
radv_physical_device
       .GOOGLE_user_type = true,
       .INTEL_shader_integer_functions2 = true,
       .NV_compute_shader_derivatives = true,
-      .NV_device_generated_commands = 
radv_NV_device_generated_commands_enabled(device),
-      .NV_device_generated_commands_compute = 
radv_NV_device_generated_commands_enabled(device),
+      .NV_device_generated_commands = device->instance->enable_dgc,
+      .NV_device_generated_commands_compute = device->instance->enable_dgc,
       /* Undocumented extension purely for vkd3d-proton. This check is to 
prevent anyone else from
        * using it.
        */
@@ -1138,8 +1132,7 @@ radv_max_descriptor_set_size()
 static uint32_t
 radv_uniform_buffer_offset_alignment(const struct radv_physical_device 
*pdevice)
 {
-   uint32_t uniform_offset_alignment =
-      driQueryOptioni(&pdevice->instance->dri_options, 
"radv_override_uniform_offset_alignment");
+   uint32_t uniform_offset_alignment = 
pdevice->instance->override_uniform_offset_alignment;
    if (!util_is_power_of_two_or_zero(uniform_offset_alignment)) {
       fprintf(stderr,
               "ERROR: invalid radv_override_uniform_offset_alignment setting 
%d:"
@@ -1160,7 +1153,7 @@ radv_get_compiler_string(struct radv_physical_device 
*pdevice)
        * version is too old or if the LLVM version string is
        * missing. This gives 2-5% performance with SotTR and ACO.
        */
-      if (driQueryOptionb(&pdevice->instance->dri_options, 
"radv_report_llvm9_version_string")) {
+      if (pdevice->instance->report_llvm9_version_string) {
          return " (LLVM 9.0.1)";
       }
 
@@ -1914,9 +1907,8 @@ radv_physical_device_try_create(struct radv_instance 
*instance, drmDevicePtr drm
    device->emulate_etc2 = !radv_device_supports_etc(device);
    device->emulate_astc = true;
 #else
-   device->emulate_etc2 =
-      !radv_device_supports_etc(device) && 
driQueryOptionb(&device->instance->dri_options, "vk_require_etc2");
-   device->emulate_astc = driQueryOptionb(&device->instance->dri_options, 
"vk_require_astc");
+   device->emulate_etc2 = !radv_device_supports_etc(device) && 
instance->vk_require_etc2;
+   device->emulate_astc = instance->vk_require_astc;
 #endif
 
    snprintf(device->name, sizeof(device->name), "AMD RADV %s%s", 
device->rad_info.name,
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index a73d278f643..3e704256c5d 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -383,10 +383,17 @@ struct radv_instance {
    bool dual_color_blend_by_location;
    bool legacy_sparse_binding;
    bool clear_lds;
+   bool enable_dgc;
+   bool enable_khr_present_wait;
+   bool report_llvm9_version_string;
+   bool vk_require_etc2;
+   bool vk_require_astc;
    char *app_layer;
    uint8_t override_graphics_shader_version;
    uint8_t override_compute_shader_version;
    uint8_t override_ray_tracing_shader_version;
+   int override_vram_size;
+   int override_uniform_offset_alignment;
 };
 
 VkResult radv_init_wsi(struct radv_physical_device *physical_device);

Reply via email to