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

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

radv: move dri options to radv_instance::drirc

To make it clearer that such an option is a per-application option.

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

---

 src/amd/vulkan/layers/radv_sqtt_layer.c            |  2 +-
 .../vulkan/nir/radv_nir_apply_pipeline_layout.c    |  2 +-
 src/amd/vulkan/radv_descriptor_set.c               |  2 +-
 src/amd/vulkan/radv_device.c                       |  8 +-
 src/amd/vulkan/radv_device_memory.c                |  2 +-
 src/amd/vulkan/radv_image.c                        |  2 +-
 src/amd/vulkan/radv_image_view.c                   |  2 +-
 src/amd/vulkan/radv_instance.c                     | 92 ++++++++++++----------
 src/amd/vulkan/radv_physical_device.c              | 32 ++++----
 src/amd/vulkan/radv_pipeline.c                     | 14 ++--
 src/amd/vulkan/radv_pipeline_compute.c             |  2 +-
 src/amd/vulkan/radv_pipeline_graphics.c            |  6 +-
 src/amd/vulkan/radv_pipeline_rt.c                  |  2 +-
 src/amd/vulkan/radv_private.h                      | 65 ++++++++-------
 src/amd/vulkan/radv_query.c                        |  6 +-
 src/amd/vulkan/radv_queue.c                        |  2 +-
 src/amd/vulkan/radv_sampler.c                      |  4 +-
 src/amd/vulkan/radv_shader.c                       |  4 +-
 src/amd/vulkan/radv_wsi.c                          |  2 +-
 19 files changed, 128 insertions(+), 123 deletions(-)

diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c 
b/src/amd/vulkan/layers/radv_sqtt_layer.c
index a63080d9fb8..b946cb59658 100644
--- a/src/amd/vulkan/layers/radv_sqtt_layer.c
+++ b/src/amd/vulkan/layers/radv_sqtt_layer.c
@@ -338,7 +338,7 @@ radv_describe_begin_cmd_buffer(struct radv_cmd_buffer 
*cmd_buffer)
    if (cmd_buffer->qf == RADV_QUEUE_GENERAL)
       marker.queue_flags |= VK_QUEUE_GRAPHICS_BIT;
 
-   if (cmd_buffer->device->instance->legacy_sparse_binding)
+   if (cmd_buffer->device->instance->drirc.legacy_sparse_binding)
       marker.queue_flags |= VK_QUEUE_SPARSE_BINDING_BIT;
 
    radv_emit_sqtt_userdata(cmd_buffer, &marker, sizeof(marker) / 4);
diff --git a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c 
b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c
index 210a1357f00..7428b38eade 100644
--- a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c
+++ b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c
@@ -505,7 +505,7 @@ radv_nir_apply_pipeline_layout(nir_shader *shader, struct 
radv_device *device, c
    apply_layout_state state = {
       .gfx_level = device->physical_device->rad_info.gfx_level,
       .address32_hi = device->physical_device->rad_info.address32_hi,
-      .disable_aniso_single_level = 
device->instance->disable_aniso_single_level,
+      .disable_aniso_single_level = 
device->instance->drirc.disable_aniso_single_level,
       .has_image_load_dcc_bug = 
device->physical_device->rad_info.has_image_load_dcc_bug,
       .disable_tg4_trunc_coord =
          !device->physical_device->rad_info.conformant_trunc_coord && 
!device->disable_trunc_coord,
diff --git a/src/amd/vulkan/radv_descriptor_set.c 
b/src/amd/vulkan/radv_descriptor_set.c
index c9e68d8ddac..e0a4afa1de2 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -913,7 +913,7 @@ radv_create_descriptor_pool(struct radv_device *device, 
const VkDescriptorPoolCr
       if (!(pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT)) 
{
          enum radeon_bo_flag flags = RADEON_FLAG_NO_INTERPROCESS_SHARING | 
RADEON_FLAG_READ_ONLY | RADEON_FLAG_32BIT;
 
-         if (device->instance->zero_vram)
+         if (device->instance->drirc.zero_vram)
             flags |= RADEON_FLAG_ZERO_VRAM;
 
          VkResult result = device->ws->buffer_create(device->ws, bo_size, 32, 
RADEON_DOMAIN_VRAM, flags,
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index dd5ced88935..a7faa0bb8c6 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -595,11 +595,11 @@ init_dispatch_tables(struct radv_device *device, struct 
radv_physical_device *ph
    b.tables[RADV_RRA_DISPATCH_TABLE] = &device->layer_dispatch.rra;
    b.tables[RADV_RMV_DISPATCH_TABLE] = &device->layer_dispatch.rmv;
 
-   if (!strcmp(physical_device->instance->app_layer, "metroexodus")) {
+   if (!strcmp(physical_device->instance->drirc.app_layer, "metroexodus")) {
       add_entrypoints(&b, &metro_exodus_device_entrypoints, 
RADV_APP_DISPATCH_TABLE);
-   } else if (!strcmp(physical_device->instance->app_layer, "rage2")) {
+   } else if (!strcmp(physical_device->instance->drirc.app_layer, "rage2")) {
       add_entrypoints(&b, &rage2_device_entrypoints, RADV_APP_DISPATCH_TABLE);
-   } else if (!strcmp(physical_device->instance->app_layer, "quanticdream")) {
+   } else if (!strcmp(physical_device->instance->drirc.app_layer, 
"quanticdream")) {
       add_entrypoints(&b, &quantic_dream_device_entrypoints, 
RADV_APP_DISPATCH_TABLE);
    }
 
@@ -1162,7 +1162,7 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const 
VkDeviceCreateInfo *pCr
       fprintf(stderr, "radv: Forcing anisotropy filter to %ix\n", 1 << 
util_logbase2(device->force_aniso));
    }
 
-   device->disable_trunc_coord = device->instance->disable_trunc_coord;
+   device->disable_trunc_coord = device->instance->drirc.disable_trunc_coord;
 
    if (device->instance->vk.app_info.engine_name && 
!strcmp(device->instance->vk.app_info.engine_name, "DXVK")) {
       /* For DXVK 2.3.0 and older, use dualSrcBlend to determine if this is 
D3D9. */
diff --git a/src/amd/vulkan/radv_device_memory.c 
b/src/amd/vulkan/radv_device_memory.c
index c6f5bf0b670..180583573da 100644
--- a/src/amd/vulkan/radv_device_memory.c
+++ b/src/amd/vulkan/radv_device_memory.c
@@ -224,7 +224,7 @@ radv_alloc_memory(struct radv_device *device, const 
VkMemoryAllocateInfo *pAlloc
       if (flags_info && flags_info->flags & 
VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)
          flags |= RADEON_FLAG_REPLAYABLE;
 
-      if (device->instance->zero_vram)
+      if (device->instance->drirc.zero_vram)
          flags |= RADEON_FLAG_ZERO_VRAM;
 
       if (device->overallocation_disallowed) {
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 3b8c7aec1dd..42f343491ae 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -1400,7 +1400,7 @@ radv_layout_is_htile_compressed(const struct radv_device 
*device, const struct r
        * the number of decompressions from/to GENERAL.
        */
       if (radv_image_is_tc_compat_htile(image) && queue_mask & (1u << 
RADV_QUEUE_GENERAL) &&
-          !device->instance->disable_tc_compat_htile_in_general) {
+          !device->instance->drirc.disable_tc_compat_htile_in_general) {
          return true;
       } else {
          return false;
diff --git a/src/amd/vulkan/radv_image_view.c b/src/amd/vulkan/radv_image_view.c
index 22a55c88aca..16049eb2243 100644
--- a/src/amd/vulkan/radv_image_view.c
+++ b/src/amd/vulkan/radv_image_view.c
@@ -504,7 +504,7 @@ gfx6_make_texture_descriptor(struct radv_device *device, 
struct radv_image *imag
    if (!(image->planes[0].surface.flags & RADEON_SURF_Z_OR_SBUFFER) && 
image->planes[0].surface.meta_offset) {
       state[6] = S_008F28_ALPHA_IS_ON_MSB(vi_alpha_is_on_msb(device, 
vk_format));
    } else {
-      if (device->instance->disable_aniso_single_level) {
+      if (device->instance->drirc.disable_aniso_single_level) {
          /* The last dword is unused by hw. The shader uses it to clear
           * bits in the first dword of sampler state.
           */
diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
index 71680241a44..6f47daba764 100644
--- a/src/amd/vulkan/radv_instance.c
+++ b/src/amd/vulkan/radv_instance.c
@@ -168,83 +168,89 @@ static const driOptionDescription radv_dri_options[] = {
 static void
 radv_init_dri_options(struct radv_instance *instance)
 {
-   driParseOptionInfo(&instance->available_dri_options, radv_dri_options, 
ARRAY_SIZE(radv_dri_options));
-   driParseConfigFiles(&instance->dri_options, 
&instance->available_dri_options, 0, "radv", NULL, NULL,
+   driParseOptionInfo(&instance->drirc.available_options, radv_dri_options, 
ARRAY_SIZE(radv_dri_options));
+   driParseConfigFiles(&instance->drirc.options, 
&instance->drirc.available_options, 0, "radv", NULL, NULL,
                        instance->vk.app_info.app_name, 
instance->vk.app_info.app_version,
                        instance->vk.app_info.engine_name, 
instance->vk.app_info.engine_version);
 
-   instance->enable_mrt_output_nan_fixup = 
driQueryOptionb(&instance->dri_options, "radv_enable_mrt_output_nan_fixup");
+   instance->drirc.enable_mrt_output_nan_fixup =
+      driQueryOptionb(&instance->drirc.options, 
"radv_enable_mrt_output_nan_fixup");
 
-   instance->disable_shrink_image_store = 
driQueryOptionb(&instance->dri_options, "radv_disable_shrink_image_store");
+   instance->drirc.disable_shrink_image_store =
+      driQueryOptionb(&instance->drirc.options, 
"radv_disable_shrink_image_store");
 
-   instance->disable_tc_compat_htile_in_general =
-      driQueryOptionb(&instance->dri_options, 
"radv_disable_tc_compat_htile_general");
+   instance->drirc.disable_tc_compat_htile_in_general =
+      driQueryOptionb(&instance->drirc.options, 
"radv_disable_tc_compat_htile_general");
 
-   if (driQueryOptionb(&instance->dri_options, "radv_no_dynamic_bounds"))
+   if (driQueryOptionb(&instance->drirc.options, "radv_no_dynamic_bounds"))
       instance->debug_flags |= RADV_DEBUG_NO_DYNAMIC_BOUNDS;
 
-   if (driQueryOptionb(&instance->dri_options, "radv_lower_discard_to_demote"))
+   if (driQueryOptionb(&instance->drirc.options, 
"radv_lower_discard_to_demote"))
       instance->debug_flags |= RADV_DEBUG_DISCARD_TO_DEMOTE;
 
-   if (driQueryOptionb(&instance->dri_options, "radv_invariant_geom"))
+   if (driQueryOptionb(&instance->drirc.options, "radv_invariant_geom"))
       instance->debug_flags |= RADV_DEBUG_INVARIANT_GEOM;
 
-   if (driQueryOptionb(&instance->dri_options, "radv_split_fma"))
+   if (driQueryOptionb(&instance->drirc.options, "radv_split_fma"))
       instance->debug_flags |= RADV_DEBUG_SPLIT_FMA;
 
-   if (driQueryOptionb(&instance->dri_options, "radv_disable_dcc"))
+   if (driQueryOptionb(&instance->drirc.options, "radv_disable_dcc"))
       instance->debug_flags |= RADV_DEBUG_NO_DCC;
 
-   instance->clear_lds = driQueryOptionb(&instance->dri_options, 
"radv_clear_lds");
+   instance->drirc.clear_lds = driQueryOptionb(&instance->drirc.options, 
"radv_clear_lds");
 
-   instance->zero_vram = driQueryOptionb(&instance->dri_options, 
"radv_zero_vram");
+   instance->drirc.zero_vram = driQueryOptionb(&instance->drirc.options, 
"radv_zero_vram");
 
-   instance->disable_aniso_single_level = 
driQueryOptionb(&instance->dri_options, "radv_disable_aniso_single_level");
+   instance->drirc.disable_aniso_single_level =
+      driQueryOptionb(&instance->drirc.options, 
"radv_disable_aniso_single_level");
 
-   instance->disable_trunc_coord = driQueryOptionb(&instance->dri_options, 
"radv_disable_trunc_coord");
+   instance->drirc.disable_trunc_coord = 
driQueryOptionb(&instance->drirc.options, "radv_disable_trunc_coord");
 
-   instance->disable_sinking_load_input_fs =
-      driQueryOptionb(&instance->dri_options, 
"radv_disable_sinking_load_input_fs");
+   instance->drirc.disable_sinking_load_input_fs =
+      driQueryOptionb(&instance->drirc.options, 
"radv_disable_sinking_load_input_fs");
 
-   instance->flush_before_query_copy = driQueryOptionb(&instance->dri_options, 
"radv_flush_before_query_copy");
+   instance->drirc.flush_before_query_copy = 
driQueryOptionb(&instance->drirc.options, "radv_flush_before_query_copy");
 
-   instance->enable_unified_heap_on_apu = 
driQueryOptionb(&instance->dri_options, "radv_enable_unified_heap_on_apu");
+   instance->drirc.enable_unified_heap_on_apu =
+      driQueryOptionb(&instance->drirc.options, 
"radv_enable_unified_heap_on_apu");
 
-   instance->tex_non_uniform = driQueryOptionb(&instance->dri_options, 
"radv_tex_non_uniform");
+   instance->drirc.tex_non_uniform = driQueryOptionb(&instance->drirc.options, 
"radv_tex_non_uniform");
 
-   instance->ssbo_non_uniform = driQueryOptionb(&instance->dri_options, 
"radv_ssbo_non_uniform");
+   instance->drirc.ssbo_non_uniform = 
driQueryOptionb(&instance->drirc.options, "radv_ssbo_non_uniform");
 
-   instance->app_layer = driQueryOptionstr(&instance->dri_options, 
"radv_app_layer");
+   instance->drirc.app_layer = driQueryOptionstr(&instance->drirc.options, 
"radv_app_layer");
 
-   instance->flush_before_timestamp_write =
-      driQueryOptionb(&instance->dri_options, 
"radv_flush_before_timestamp_write");
+   instance->drirc.flush_before_timestamp_write =
+      driQueryOptionb(&instance->drirc.options, 
"radv_flush_before_timestamp_write");
 
-   instance->force_rt_wave64 = driQueryOptionb(&instance->dri_options, 
"radv_rt_wave64");
+   instance->drirc.force_rt_wave64 = driQueryOptionb(&instance->drirc.options, 
"radv_rt_wave64");
 
-   instance->dual_color_blend_by_location = 
driQueryOptionb(&instance->dri_options, "dual_color_blend_by_location");
+   instance->drirc.dual_color_blend_by_location =
+      driQueryOptionb(&instance->drirc.options, 
"dual_color_blend_by_location");
 
-   instance->legacy_sparse_binding = driQueryOptionb(&instance->dri_options, 
"radv_legacy_sparse_binding");
+   instance->drirc.legacy_sparse_binding = 
driQueryOptionb(&instance->drirc.options, "radv_legacy_sparse_binding");
 
-   instance->override_graphics_shader_version =
-      driQueryOptioni(&instance->dri_options, 
"radv_override_graphics_shader_version");
-   instance->override_compute_shader_version =
-      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->drirc.override_graphics_shader_version =
+      driQueryOptioni(&instance->drirc.options, 
"radv_override_graphics_shader_version");
+   instance->drirc.override_compute_shader_version =
+      driQueryOptioni(&instance->drirc.options, 
"radv_override_compute_shader_version");
+   instance->drirc.override_ray_tracing_shader_version =
+      driQueryOptioni(&instance->drirc.options, 
"radv_override_ray_tracing_shader_version");
 
-   instance->enable_dgc = driQueryOptionb(&instance->dri_options, "radv_dgc");
+   instance->drirc.enable_dgc = driQueryOptionb(&instance->drirc.options, 
"radv_dgc");
 
-   instance->override_vram_size = driQueryOptioni(&instance->dri_options, 
"override_vram_size");
+   instance->drirc.override_vram_size = 
driQueryOptioni(&instance->drirc.options, "override_vram_size");
 
-   instance->enable_khr_present_wait = driQueryOptionb(&instance->dri_options, 
"vk_khr_present_wait");
+   instance->drirc.enable_khr_present_wait = 
driQueryOptionb(&instance->drirc.options, "vk_khr_present_wait");
 
-   instance->override_uniform_offset_alignment =
-      driQueryOptioni(&instance->dri_options, 
"radv_override_uniform_offset_alignment");
+   instance->drirc.override_uniform_offset_alignment =
+      driQueryOptioni(&instance->drirc.options, 
"radv_override_uniform_offset_alignment");
 
-   instance->report_llvm9_version_string = 
driQueryOptionb(&instance->dri_options, "radv_report_llvm9_version_string");
+   instance->drirc.report_llvm9_version_string =
+      driQueryOptionb(&instance->drirc.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");
+   instance->drirc.vk_require_etc2 = driQueryOptionb(&instance->drirc.options, 
"vk_require_etc2");
+   instance->drirc.vk_require_astc = driQueryOptionb(&instance->drirc.options, 
"vk_require_astc");
 }
 
 static const struct vk_instance_extension_table 
radv_instance_extensions_supported = {
@@ -359,8 +365,8 @@ radv_DestroyInstance(VkInstance _instance, const 
VkAllocationCallbacks *pAllocat
 
    VG(VALGRIND_DESTROY_MEMPOOL(instance));
 
-   driDestroyOptionCache(&instance->dri_options);
-   driDestroyOptionInfo(&instance->available_dri_options);
+   driDestroyOptionCache(&instance->drirc.options);
+   driDestroyOptionInfo(&instance->drirc.available_options);
 
    vk_instance_finish(&instance->vk);
    vk_free(&instance->vk.alloc, instance);
diff --git a/src/amd/vulkan/radv_physical_device.c 
b/src/amd/vulkan/radv_physical_device.c
index d77a3d0f0c2..867a0956e46 100644
--- a/src/amd/vulkan/radv_physical_device.c
+++ b/src/amd/vulkan/radv_physical_device.c
@@ -224,7 +224,7 @@ enum radv_heap {
 static uint64_t
 radv_get_adjusted_vram_size(struct radv_physical_device *device)
 {
-   int ov = device->instance->override_vram_size;
+   int ov = device->instance->drirc.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;
@@ -257,7 +257,7 @@ radv_physical_device_init_mem_types(struct 
radv_physical_device *device)
    if (!device->rad_info.has_dedicated_vram) {
       const uint64_t total_size = gtt_size + visible_vram_size;
 
-      if (device->instance->enable_unified_heap_on_apu) {
+      if (device->instance->drirc.enable_unified_heap_on_apu) {
          /* Some applications seem better when the driver exposes only one 
heap of VRAM on APUs. */
          visible_vram_size = total_size;
          gtt_size = 0;
@@ -475,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 = device->instance->enable_khr_present_wait ||
+      .KHR_present_id = device->instance->drirc.enable_khr_present_wait ||
                         
wsi_common_vk_instance_supports_present_wait(&device->instance->vk),
-      .KHR_present_wait = device->instance->enable_khr_present_wait ||
+      .KHR_present_wait = device->instance->drirc.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),
@@ -603,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 && 
!device->instance->enable_dgc,
+      .EXT_vertex_input_dynamic_state = !device->use_llvm && 
!device->instance->drirc.enable_dgc,
       .EXT_ycbcr_image_arrays = true,
       .AMD_buffer_marker = true,
       .AMD_device_coherent_memory = true,
@@ -632,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 = device->instance->enable_dgc,
-      .NV_device_generated_commands_compute = device->instance->enable_dgc,
+      .NV_device_generated_commands = device->instance->drirc.enable_dgc,
+      .NV_device_generated_commands_compute = 
device->instance->drirc.enable_dgc,
       /* Undocumented extension purely for vkd3d-proton. This check is to 
prevent anyone else from
        * using it.
        */
@@ -1132,7 +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 = 
pdevice->instance->override_uniform_offset_alignment;
+   uint32_t uniform_offset_alignment = 
pdevice->instance->drirc.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:"
@@ -1153,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 (pdevice->instance->report_llvm9_version_string) {
+      if (pdevice->instance->drirc.report_llvm9_version_string) {
          return " (LLVM 9.0.1)";
       }
 
@@ -1907,8 +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) && 
instance->vk_require_etc2;
-   device->emulate_astc = instance->vk_require_astc;
+   device->emulate_etc2 = !radv_device_supports_etc(device) && 
instance->drirc.vk_require_etc2;
+   device->emulate_astc = instance->drirc.vk_require_astc;
 #endif
 
    snprintf(device->name, sizeof(device->name), "AMD RADV %s%s", 
device->rad_info.name,
@@ -1978,8 +1978,8 @@ radv_physical_device_try_create(struct radv_instance 
*instance, drmDevicePtr drm
        * dependence wave32 would likely be a net-loss (as well as the SALU 
count becoming more
        * problematic)
        */
-      if (!(device->instance->perftest_flags & RADV_PERFTEST_RT_WAVE_64) && 
!(device->instance->force_rt_wave64) &&
-          device->rad_info.gfx_level < GFX11)
+      if (!(device->instance->perftest_flags & RADV_PERFTEST_RT_WAVE_64) &&
+          !(device->instance->drirc.force_rt_wave64) && 
device->rad_info.gfx_level < GFX11)
          device->rt_wave_size = 32;
    }
 
@@ -2142,7 +2142,7 @@ radv_get_physical_device_queue_family_properties(struct 
radv_physical_device *pd
    idx = 0;
    if (*pCount >= 1) {
       VkQueueFlags gfx_flags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | 
VK_QUEUE_TRANSFER_BIT;
-      if (pdevice->instance->legacy_sparse_binding)
+      if (pdevice->instance->drirc.legacy_sparse_binding)
          gfx_flags |= VK_QUEUE_SPARSE_BINDING_BIT;
       *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){
          .queueFlags = gfx_flags,
@@ -2156,7 +2156,7 @@ radv_get_physical_device_queue_family_properties(struct 
radv_physical_device *pd
    if (pdevice->rad_info.ip[AMD_IP_COMPUTE].num_queues > 0 &&
        !(pdevice->instance->debug_flags & RADV_DEBUG_NO_COMPUTE_QUEUE)) {
       VkQueueFlags compute_flags = VK_QUEUE_COMPUTE_BIT | 
VK_QUEUE_TRANSFER_BIT;
-      if (pdevice->instance->legacy_sparse_binding)
+      if (pdevice->instance->drirc.legacy_sparse_binding)
          compute_flags |= VK_QUEUE_SPARSE_BINDING_BIT;
       if (*pCount > idx) {
          *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){
@@ -2278,7 +2278,7 @@ radv_get_memory_budget_properties(VkPhysicalDevice 
physicalDevice,
     * in presence of shared buffers).
     */
    if (!device->rad_info.has_dedicated_vram) {
-      if (device->instance->enable_unified_heap_on_apu) {
+      if (device->instance->drirc.enable_unified_heap_on_apu) {
          /* When the heaps are unified, only the visible VRAM heap is exposed 
on APUs. */
          assert(device->heaps == RADV_HEAP_VRAM_VIS);
          assert(device->memory_properties.memoryHeaps[0].flags == 
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index c46360ac69d..65720935aa8 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -155,14 +155,14 @@ radv_generate_pipeline_key(const struct radv_device 
*device, const VkPipelineSha
       key.optimisations_disabled = 1;
 
    key.disable_aniso_single_level =
-      device->instance->disable_aniso_single_level && 
device->physical_device->rad_info.gfx_level < GFX8;
+      device->instance->drirc.disable_aniso_single_level && 
device->physical_device->rad_info.gfx_level < GFX8;
 
    key.disable_trunc_coord = device->disable_trunc_coord;
 
    key.image_2d_view_of_3d = device->image_2d_view_of_3d && 
device->physical_device->rad_info.gfx_level == GFX9;
 
-   key.tex_non_uniform = device->instance->tex_non_uniform;
-   key.ssbo_non_uniform = device->instance->ssbo_non_uniform;
+   key.tex_non_uniform = device->instance->drirc.tex_non_uniform;
+   key.ssbo_non_uniform = device->instance->drirc.ssbo_non_uniform;
 
    for (unsigned i = 0; i < num_stages; ++i) {
       const VkPipelineShaderStageCreateInfo *const stage = &stages[i];
@@ -266,9 +266,9 @@ radv_get_hash_flags(const struct radv_device *device, bool 
stats)
       hash_flags |= RADV_HASH_SHADER_NO_FMASK;
    if (device->instance->debug_flags & RADV_DEBUG_NO_RT)
       hash_flags |= RADV_HASH_SHADER_NO_RT;
-   if (device->instance->dual_color_blend_by_location)
+   if (device->instance->drirc.dual_color_blend_by_location)
       hash_flags |= RADV_HASH_SHADER_DUAL_BLEND_MRT1;
-   if (device->instance->clear_lds)
+   if (device->instance->drirc.clear_lds)
       hash_flags |= RADV_HASH_SHADER_CLEAR_LDS;
    return hash_flags;
 }
@@ -582,7 +582,7 @@ radv_postprocess_nir(struct radv_device *device, const 
struct radv_pipeline_key
       NIR_PASS(progress, stage->nir, nir_opt_load_store_vectorize, 
&vectorize_opts);
       if (progress) {
          NIR_PASS(_, stage->nir, nir_copy_prop);
-         NIR_PASS(_, stage->nir, nir_opt_shrink_stores, 
!device->instance->disable_shrink_image_store);
+         NIR_PASS(_, stage->nir, nir_opt_shrink_stores, 
!device->instance->drirc.disable_shrink_image_store);
 
          /* Gather info again, to update whether 8/16-bit are used. */
          nir_shader_gather_info(stage->nir, 
nir_shader_get_entrypoint(stage->nir));
@@ -796,7 +796,7 @@ radv_shader_should_clear_lds(const struct radv_device 
*device, const nir_shader
 {
    return (shader->info.stage == MESA_SHADER_COMPUTE || shader->info.stage == 
MESA_SHADER_MESH ||
            shader->info.stage == MESA_SHADER_TASK) &&
-          shader->info.shared_size > 0 && device->instance->clear_lds;
+          shader->info.shared_size > 0 && device->instance->drirc.clear_lds;
 }
 
 static uint32_t
diff --git a/src/amd/vulkan/radv_pipeline_compute.c 
b/src/amd/vulkan/radv_pipeline_compute.c
index a3bbb92b58a..edc14e6130c 100644
--- a/src/amd/vulkan/radv_pipeline_compute.c
+++ b/src/amd/vulkan/radv_pipeline_compute.c
@@ -112,7 +112,7 @@ radv_generate_compute_pipeline_key(const struct radv_device 
*device, const struc
    struct radv_pipeline_key key =
       radv_generate_pipeline_key(device, &pCreateInfo->stage, 1, 
pipeline->base.create_flags, pCreateInfo->pNext);
 
-   key.shader_version = device->instance->override_compute_shader_version;
+   key.shader_version = 
device->instance->drirc.override_compute_shader_version;
 
    return key;
 }
diff --git a/src/amd/vulkan/radv_pipeline_graphics.c 
b/src/amd/vulkan/radv_pipeline_graphics.c
index bc693edbf97..ddebb2d3b7e 100644
--- a/src/amd/vulkan/radv_pipeline_graphics.c
+++ b/src/amd/vulkan/radv_pipeline_graphics.c
@@ -1725,7 +1725,7 @@ radv_generate_ps_epilog_key(const struct radv_device 
*device, const struct radv_
    key.spi_shader_col_format = col_format;
    key.color_is_int8 = device->physical_device->rad_info.gfx_level < GFX8 ? 
is_int8 : 0;
    key.color_is_int10 = device->physical_device->rad_info.gfx_level < GFX8 ? 
is_int10 : 0;
-   key.enable_mrt_output_nan_fixup = 
device->instance->enable_mrt_output_nan_fixup ? is_float32 : 0;
+   key.enable_mrt_output_nan_fixup = 
device->instance->drirc.enable_mrt_output_nan_fixup ? is_float32 : 0;
    key.mrt0_is_dual_src = state->mrt0_is_dual_src;
    key.export_depth = state->export_depth;
    key.export_stencil = state->export_stencil;
@@ -1803,7 +1803,7 @@ radv_generate_graphics_pipeline_key(const struct 
radv_device *device, const stru
    struct radv_pipeline_key key = radv_generate_pipeline_key(device, 
pCreateInfo->pStages, pCreateInfo->stageCount,
                                                              
pipeline->base.create_flags, pCreateInfo->pNext);
 
-   key.shader_version = device->instance->override_graphics_shader_version;
+   key.shader_version = 
device->instance->drirc.override_graphics_shader_version;
 
    key.lib_flags = lib_flags;
    key.has_multiview_view_index = state->rp ? !!state->rp->view_mask : 0;
@@ -1908,7 +1908,7 @@ radv_generate_graphics_pipeline_key(const struct 
radv_device *device, const stru
         device->physical_device->rad_info.family == CHIP_VANGOGH))
       key.adjust_frag_coord_z = true;
 
-   if (device->instance->disable_sinking_load_input_fs)
+   if (device->instance->drirc.disable_sinking_load_input_fs)
       key.disable_sinking_load_input_fs = true;
 
    if (device->primitives_generated_query)
diff --git a/src/amd/vulkan/radv_pipeline_rt.c 
b/src/amd/vulkan/radv_pipeline_rt.c
index 91f579cac7e..c4ca2a2126b 100644
--- a/src/amd/vulkan/radv_pipeline_rt.c
+++ b/src/amd/vulkan/radv_pipeline_rt.c
@@ -91,7 +91,7 @@ radv_generate_rt_pipeline_key(const struct radv_device 
*device, const struct rad
    struct radv_pipeline_key key = radv_generate_pipeline_key(device, 
pCreateInfo->pStages, pCreateInfo->stageCount,
                                                              
pipeline->base.base.create_flags, pCreateInfo->pNext);
 
-   key.shader_version = device->instance->override_ray_tracing_shader_version;
+   key.shader_version = 
device->instance->drirc.override_ray_tracing_shader_version;
 
    if (pCreateInfo->pLibraryInfo) {
       for (unsigned i = 0; i < pCreateInfo->pLibraryInfo->libraryCount; ++i) {
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 3e704256c5d..7aea07f3fe7 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -361,39 +361,38 @@ struct radv_instance {
    uint64_t debug_flags;
    uint64_t perftest_flags;
 
-   struct driOptionCache dri_options;
-   struct driOptionCache available_dri_options;
-
-   /**
-    * Workarounds for game bugs.
-    */
-   bool enable_mrt_output_nan_fixup;
-   bool disable_tc_compat_htile_in_general;
-   bool disable_shrink_image_store;
-   bool disable_aniso_single_level;
-   bool disable_trunc_coord;
-   bool zero_vram;
-   bool disable_sinking_load_input_fs;
-   bool flush_before_query_copy;
-   bool enable_unified_heap_on_apu;
-   bool tex_non_uniform;
-   bool ssbo_non_uniform;
-   bool flush_before_timestamp_write;
-   bool force_rt_wave64;
-   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;
+   struct {
+      struct driOptionCache options;
+      struct driOptionCache available_options;
+
+      bool enable_mrt_output_nan_fixup;
+      bool disable_tc_compat_htile_in_general;
+      bool disable_shrink_image_store;
+      bool disable_aniso_single_level;
+      bool disable_trunc_coord;
+      bool zero_vram;
+      bool disable_sinking_load_input_fs;
+      bool flush_before_query_copy;
+      bool enable_unified_heap_on_apu;
+      bool tex_non_uniform;
+      bool ssbo_non_uniform;
+      bool flush_before_timestamp_write;
+      bool force_rt_wave64;
+      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;
+   } drirc;
 };
 
 VkResult radv_init_wsi(struct radv_physical_device *physical_device);
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 17da2892d3d..0a215ba761d 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -1682,7 +1682,7 @@ radv_CmdCopyQueryPoolResults(VkCommandBuffer 
commandBuffer, VkQueryPool queryPoo
    /* Workaround engines that forget to properly specify WAIT_BIT because some 
driver implicitly
     * synchronizes before query copy.
     */
-   if (cmd_buffer->device->instance->flush_before_query_copy)
+   if (cmd_buffer->device->instance->drirc.flush_before_query_copy)
       cmd_buffer->state.flush_bits |= cmd_buffer->active_query_flush_bits;
 
    /* From the Vulkan spec 1.1.108:
@@ -2452,7 +2452,7 @@ radv_CmdWriteTimestamp2(VkCommandBuffer commandBuffer, 
VkPipelineStageFlags2 sta
    radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
 
    if (cmd_buffer->qf == RADV_QUEUE_TRANSFER) {
-      if (cmd_buffer->device->instance->flush_before_timestamp_write) {
+      if (cmd_buffer->device->instance->drirc.flush_before_timestamp_write) {
          radeon_check_space(cmd_buffer->device->ws, cmd_buffer->cs, 1);
          radeon_emit(cmd_buffer->cs, SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0));
       }
@@ -2466,7 +2466,7 @@ radv_CmdWriteTimestamp2(VkCommandBuffer commandBuffer, 
VkPipelineStageFlags2 sta
       return;
    }
 
-   if (cmd_buffer->device->instance->flush_before_timestamp_write) {
+   if (cmd_buffer->device->instance->drirc.flush_before_timestamp_write) {
       /* Make sure previously launched waves have finished */
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_PS_PARTIAL_FLUSH | 
RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
    }
diff --git a/src/amd/vulkan/radv_queue.c b/src/amd/vulkan/radv_queue.c
index 92494088606..3d4382878d1 100644
--- a/src/amd/vulkan/radv_queue.c
+++ b/src/amd/vulkan/radv_queue.c
@@ -1728,7 +1728,7 @@ radv_queue_submit(struct vk_queue *vqueue, struct 
vk_queue_submit *submission)
    struct radv_queue *queue = (struct radv_queue *)vqueue;
    VkResult result;
 
-   if (queue->device->instance->legacy_sparse_binding) {
+   if (queue->device->instance->drirc.legacy_sparse_binding) {
       result = radv_queue_submit_bind_sparse_memory(queue->device, submission);
       if (result != VK_SUCCESS)
          goto fail;
diff --git a/src/amd/vulkan/radv_sampler.c b/src/amd/vulkan/radv_sampler.c
index baf171dd5f7..d7e10280fff 100644
--- a/src/amd/vulkan/radv_sampler.c
+++ b/src/amd/vulkan/radv_sampler.c
@@ -246,12 +246,12 @@ radv_init_sampler(struct radv_device *device, struct 
radv_sampler *sampler, cons
 
    if (device->physical_device->rad_info.gfx_level >= GFX10) {
       sampler->state[2] |= 
S_008F38_LOD_BIAS(radv_float_to_sfixed(CLAMP(pCreateInfo->mipLodBias, -32, 31), 
8)) |
-                           
S_008F38_ANISO_OVERRIDE_GFX10(device->instance->disable_aniso_single_level);
+                           
S_008F38_ANISO_OVERRIDE_GFX10(device->instance->drirc.disable_aniso_single_level);
    } else {
       sampler->state[2] |= 
S_008F38_LOD_BIAS(radv_float_to_sfixed(CLAMP(pCreateInfo->mipLodBias, -16, 16), 
8)) |
                            
S_008F38_DISABLE_LSB_CEIL(device->physical_device->rad_info.gfx_level <= GFX8) |
                            S_008F38_FILTER_PREC_FIX(1) |
-                           
S_008F38_ANISO_OVERRIDE_GFX8(device->instance->disable_aniso_single_level &&
+                           
S_008F38_ANISO_OVERRIDE_GFX8(device->instance->drirc.disable_aniso_single_level 
&&
                                                         
device->physical_device->rad_info.gfx_level >= GFX8);
    }
 
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index a762fd5690d..30c1679afba 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -542,7 +542,7 @@ radv_shader_spirv_to_nir(struct radv_device *device, const 
struct radv_shader_st
                nir_var_shader_in | nir_var_shader_out | nir_var_system_value | 
nir_var_mem_shared, &dead_vars_opts);
 
       if (nir->info.stage == MESA_SHADER_FRAGMENT && 
key->ps.epilog.mrt0_is_dual_src &&
-          device->instance->dual_color_blend_by_location)
+          device->instance->drirc.dual_color_blend_by_location)
          fix_dual_src_mrt1_export(nir);
 
       /* Variables can make nir_propagate_invariant more conservative
@@ -668,7 +668,7 @@ radv_shader_spirv_to_nir(struct radv_device *device, const 
struct radv_shader_st
             });
 
    NIR_PASS(_, nir, nir_lower_load_const_to_scalar);
-   NIR_PASS(_, nir, nir_opt_shrink_stores, 
!device->instance->disable_shrink_image_store);
+   NIR_PASS(_, nir, nir_opt_shrink_stores, 
!device->instance->drirc.disable_shrink_image_store);
 
    if (!key->optimisations_disabled)
       radv_optimize_nir(nir, false);
diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c
index f8c339bd210..1c9033fdfc9 100644
--- a/src/amd/vulkan/radv_wsi.c
+++ b/src/amd/vulkan/radv_wsi.c
@@ -92,7 +92,7 @@ radv_init_wsi(struct radv_physical_device *physical_device)
    VkResult result =
       wsi_device_init(&physical_device->wsi_device, 
radv_physical_device_to_handle(physical_device), radv_wsi_proc_addr,
                       &physical_device->instance->vk.alloc, 
physical_device->master_fd,
-                      &physical_device->instance->dri_options, &(struct 
wsi_device_options){.sw_device = false});
+                      &physical_device->instance->drirc.options, &(struct 
wsi_device_options){.sw_device = false});
    if (result != VK_SUCCESS)
       return result;
 


Reply via email to