xref: /aosp_15_r20/external/mesa3d/src/intel/vulkan/anv_instance.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /* Copyright © 2024 Intel Corporation
2*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
3*61046927SAndroid Build Coastguard Worker  */
4*61046927SAndroid Build Coastguard Worker 
5*61046927SAndroid Build Coastguard Worker #include "anv_private.h"
6*61046927SAndroid Build Coastguard Worker #include "anv_api_version.h"
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #include "util/driconf.h"
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker static const driOptionDescription anv_dri_options[] = {
11*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_PERFORMANCE
12*61046927SAndroid Build Coastguard Worker       DRI_CONF_ADAPTIVE_SYNC(true)
13*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
14*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
15*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_KHR_PRESENT_WAIT(false)
16*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
17*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0)
18*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS_WITH_BARRIER(false)
19*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_DISABLE_FCV(false)
20*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_DISABLE_XE2_CCS(false)
21*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_EXTERNAL_MEMORY_IMPLICIT_SYNC(true)
22*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_FORCE_GUC_LOW_LATENCY(false)
23*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(false)
24*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_FORCE_FILTER_ADDR_ROUNDING(false)
25*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_FP64_WORKAROUND_ENABLED(false)
26*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_GENERATED_INDIRECT_THRESHOLD(4)
27*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_GENERATED_INDIRECT_RING_THRESHOLD(100)
28*61046927SAndroid Build Coastguard Worker       DRI_CONF_NO_16BIT(false)
29*61046927SAndroid Build Coastguard Worker       DRI_CONF_INTEL_ENABLE_WA_14018912822(false)
30*61046927SAndroid Build Coastguard Worker       DRI_CONF_INTEL_SAMPLER_ROUTE_TO_LSC(false)
31*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_QUERY_CLEAR_WITH_BLORP_THRESHOLD(6)
32*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_QUERY_COPY_WITH_SHADER_THRESHOLD(6)
33*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_FORCE_INDIRECT_DESCRIPTORS(false)
34*61046927SAndroid Build Coastguard Worker       DRI_CONF_SHADER_SPILLING_RATE(0)
35*61046927SAndroid Build Coastguard Worker       DRI_CONF_OPT_B(intel_tbimr, true, "Enable TBIMR tiled rendering")
36*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_COMPRESSION_CONTROL_ENABLED(false)
37*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_FAKE_NONLOCAL_MEMORY(false)
38*61046927SAndroid Build Coastguard Worker       DRI_CONF_OPT_E(intel_stack_id, 512, 256, 2048,
39*61046927SAndroid Build Coastguard Worker                      "Control the number stackIDs (i.e. number of unique rays in the RT subsytem)",
40*61046927SAndroid Build Coastguard Worker                      DRI_CONF_ENUM(256,  "256 stackids")
41*61046927SAndroid Build Coastguard Worker                      DRI_CONF_ENUM(512,  "512 stackids")
42*61046927SAndroid Build Coastguard Worker                      DRI_CONF_ENUM(1024, "1024 stackids")
43*61046927SAndroid Build Coastguard Worker                      DRI_CONF_ENUM(2048, "2048 stackids"))
44*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_END
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_DEBUG
47*61046927SAndroid Build Coastguard Worker       DRI_CONF_ALWAYS_FLUSH_CACHE(false)
48*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false)
49*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false)
50*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_X11_IGNORE_SUBOPTIMAL(false)
51*61046927SAndroid Build Coastguard Worker       DRI_CONF_LIMIT_TRIG_INPUT_RANGE(false)
52*61046927SAndroid Build Coastguard Worker       DRI_CONF_ANV_MESH_CONV_PRIM_ATTRS_TO_VERT_ATTRS(-2)
53*61046927SAndroid Build Coastguard Worker       DRI_CONF_FORCE_VK_VENDOR()
54*61046927SAndroid Build Coastguard Worker       DRI_CONF_FAKE_SPARSE(false)
55*61046927SAndroid Build Coastguard Worker #if DETECT_OS_ANDROID && ANDROID_API_LEVEL >= 34
56*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_REQUIRE_ASTC(true)
57*61046927SAndroid Build Coastguard Worker #else
58*61046927SAndroid Build Coastguard Worker       DRI_CONF_VK_REQUIRE_ASTC(false)
59*61046927SAndroid Build Coastguard Worker #endif
60*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_END
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_QUALITY
63*61046927SAndroid Build Coastguard Worker       DRI_CONF_PP_LOWER_DEPTH_RANGE_RATE()
64*61046927SAndroid Build Coastguard Worker    DRI_CONF_SECTION_END
65*61046927SAndroid Build Coastguard Worker };
66*61046927SAndroid Build Coastguard Worker 
anv_EnumerateInstanceVersion(uint32_t * pApiVersion)67*61046927SAndroid Build Coastguard Worker VkResult anv_EnumerateInstanceVersion(
68*61046927SAndroid Build Coastguard Worker     uint32_t*                                   pApiVersion)
69*61046927SAndroid Build Coastguard Worker {
70*61046927SAndroid Build Coastguard Worker     *pApiVersion = ANV_API_VERSION;
71*61046927SAndroid Build Coastguard Worker     return VK_SUCCESS;
72*61046927SAndroid Build Coastguard Worker }
73*61046927SAndroid Build Coastguard Worker 
74*61046927SAndroid Build Coastguard Worker static const struct vk_instance_extension_table instance_extensions = {
75*61046927SAndroid Build Coastguard Worker    .KHR_device_group_creation                = true,
76*61046927SAndroid Build Coastguard Worker    .KHR_external_fence_capabilities          = true,
77*61046927SAndroid Build Coastguard Worker    .KHR_external_memory_capabilities         = true,
78*61046927SAndroid Build Coastguard Worker    .KHR_external_semaphore_capabilities      = true,
79*61046927SAndroid Build Coastguard Worker    .KHR_get_physical_device_properties2      = true,
80*61046927SAndroid Build Coastguard Worker    .EXT_debug_report                         = true,
81*61046927SAndroid Build Coastguard Worker    .EXT_debug_utils                          = true,
82*61046927SAndroid Build Coastguard Worker 
83*61046927SAndroid Build Coastguard Worker #ifdef ANV_USE_WSI_PLATFORM
84*61046927SAndroid Build Coastguard Worker    .KHR_get_surface_capabilities2            = true,
85*61046927SAndroid Build Coastguard Worker    .KHR_surface                              = true,
86*61046927SAndroid Build Coastguard Worker    .KHR_surface_protected_capabilities       = true,
87*61046927SAndroid Build Coastguard Worker    .EXT_surface_maintenance1                 = true,
88*61046927SAndroid Build Coastguard Worker    .EXT_swapchain_colorspace                 = true,
89*61046927SAndroid Build Coastguard Worker #endif
90*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
91*61046927SAndroid Build Coastguard Worker    .KHR_wayland_surface                      = true,
92*61046927SAndroid Build Coastguard Worker #endif
93*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
94*61046927SAndroid Build Coastguard Worker    .KHR_xcb_surface                          = true,
95*61046927SAndroid Build Coastguard Worker #endif
96*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XLIB_KHR
97*61046927SAndroid Build Coastguard Worker    .KHR_xlib_surface                         = true,
98*61046927SAndroid Build Coastguard Worker #endif
99*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
100*61046927SAndroid Build Coastguard Worker    .EXT_acquire_xlib_display                 = true,
101*61046927SAndroid Build Coastguard Worker #endif
102*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
103*61046927SAndroid Build Coastguard Worker    .KHR_display                              = true,
104*61046927SAndroid Build Coastguard Worker    .KHR_get_display_properties2              = true,
105*61046927SAndroid Build Coastguard Worker    .EXT_direct_mode_display                  = true,
106*61046927SAndroid Build Coastguard Worker    .EXT_display_surface_counter              = true,
107*61046927SAndroid Build Coastguard Worker    .EXT_acquire_drm_display                  = true,
108*61046927SAndroid Build Coastguard Worker #endif
109*61046927SAndroid Build Coastguard Worker #ifndef VK_USE_PLATFORM_WIN32_KHR
110*61046927SAndroid Build Coastguard Worker    .EXT_headless_surface                     = true,
111*61046927SAndroid Build Coastguard Worker #endif
112*61046927SAndroid Build Coastguard Worker };
113*61046927SAndroid Build Coastguard Worker 
anv_EnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)114*61046927SAndroid Build Coastguard Worker VkResult anv_EnumerateInstanceExtensionProperties(
115*61046927SAndroid Build Coastguard Worker     const char*                                 pLayerName,
116*61046927SAndroid Build Coastguard Worker     uint32_t*                                   pPropertyCount,
117*61046927SAndroid Build Coastguard Worker     VkExtensionProperties*                      pProperties)
118*61046927SAndroid Build Coastguard Worker {
119*61046927SAndroid Build Coastguard Worker    if (pLayerName)
120*61046927SAndroid Build Coastguard Worker       return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
121*61046927SAndroid Build Coastguard Worker 
122*61046927SAndroid Build Coastguard Worker    return vk_enumerate_instance_extension_properties(
123*61046927SAndroid Build Coastguard Worker       &instance_extensions, pPropertyCount, pProperties);
124*61046927SAndroid Build Coastguard Worker }
125*61046927SAndroid Build Coastguard Worker 
126*61046927SAndroid Build Coastguard Worker static void
anv_init_dri_options(struct anv_instance * instance)127*61046927SAndroid Build Coastguard Worker anv_init_dri_options(struct anv_instance *instance)
128*61046927SAndroid Build Coastguard Worker {
129*61046927SAndroid Build Coastguard Worker    driParseOptionInfo(&instance->available_dri_options, anv_dri_options,
130*61046927SAndroid Build Coastguard Worker                       ARRAY_SIZE(anv_dri_options));
131*61046927SAndroid Build Coastguard Worker    driParseConfigFiles(&instance->dri_options,
132*61046927SAndroid Build Coastguard Worker                        &instance->available_dri_options, 0, "anv", NULL, NULL,
133*61046927SAndroid Build Coastguard Worker                        instance->vk.app_info.app_name,
134*61046927SAndroid Build Coastguard Worker                        instance->vk.app_info.app_version,
135*61046927SAndroid Build Coastguard Worker                        instance->vk.app_info.engine_name,
136*61046927SAndroid Build Coastguard Worker                        instance->vk.app_info.engine_version);
137*61046927SAndroid Build Coastguard Worker 
138*61046927SAndroid Build Coastguard Worker     instance->assume_full_subgroups =
139*61046927SAndroid Build Coastguard Worker             driQueryOptioni(&instance->dri_options, "anv_assume_full_subgroups");
140*61046927SAndroid Build Coastguard Worker    instance->assume_full_subgroups_with_barrier =
141*61046927SAndroid Build Coastguard Worker          driQueryOptionb(&instance->dri_options, "anv_assume_full_subgroups_with_barrier");
142*61046927SAndroid Build Coastguard Worker     instance->limit_trig_input_range =
143*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "limit_trig_input_range");
144*61046927SAndroid Build Coastguard Worker     instance->sample_mask_out_opengl_behaviour =
145*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_sample_mask_out_opengl_behaviour");
146*61046927SAndroid Build Coastguard Worker     instance->force_filter_addr_rounding =
147*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_force_filter_addr_rounding");
148*61046927SAndroid Build Coastguard Worker     instance->lower_depth_range_rate =
149*61046927SAndroid Build Coastguard Worker             driQueryOptionf(&instance->dri_options, "lower_depth_range_rate");
150*61046927SAndroid Build Coastguard Worker     instance->no_16bit =
151*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "no_16bit");
152*61046927SAndroid Build Coastguard Worker     instance->intel_enable_wa_14018912822 =
153*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "intel_enable_wa_14018912822");
154*61046927SAndroid Build Coastguard Worker     instance->mesh_conv_prim_attrs_to_vert_attrs =
155*61046927SAndroid Build Coastguard Worker             driQueryOptioni(&instance->dri_options, "anv_mesh_conv_prim_attrs_to_vert_attrs");
156*61046927SAndroid Build Coastguard Worker     instance->fp64_workaround_enabled =
157*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "fp64_workaround_enabled");
158*61046927SAndroid Build Coastguard Worker     instance->generated_indirect_threshold =
159*61046927SAndroid Build Coastguard Worker             driQueryOptioni(&instance->dri_options, "generated_indirect_threshold");
160*61046927SAndroid Build Coastguard Worker     instance->generated_indirect_ring_threshold =
161*61046927SAndroid Build Coastguard Worker             driQueryOptioni(&instance->dri_options, "generated_indirect_ring_threshold");
162*61046927SAndroid Build Coastguard Worker     instance->query_clear_with_blorp_threshold =
163*61046927SAndroid Build Coastguard Worker        driQueryOptioni(&instance->dri_options, "query_clear_with_blorp_threshold");
164*61046927SAndroid Build Coastguard Worker     instance->query_copy_with_shader_threshold =
165*61046927SAndroid Build Coastguard Worker        driQueryOptioni(&instance->dri_options, "query_copy_with_shader_threshold");
166*61046927SAndroid Build Coastguard Worker     instance->force_vk_vendor =
167*61046927SAndroid Build Coastguard Worker        driQueryOptioni(&instance->dri_options, "force_vk_vendor");
168*61046927SAndroid Build Coastguard Worker     instance->has_fake_sparse =
169*61046927SAndroid Build Coastguard Worker        driQueryOptionb(&instance->dri_options, "fake_sparse");
170*61046927SAndroid Build Coastguard Worker     instance->enable_tbimr = driQueryOptionb(&instance->dri_options, "intel_tbimr");
171*61046927SAndroid Build Coastguard Worker     instance->disable_fcv =
172*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_disable_fcv");
173*61046927SAndroid Build Coastguard Worker     instance->disable_xe2_ccs =
174*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_disable_xe2_ccs");
175*61046927SAndroid Build Coastguard Worker     instance->external_memory_implicit_sync =
176*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_external_memory_implicit_sync");
177*61046927SAndroid Build Coastguard Worker     instance->compression_control_enabled =
178*61046927SAndroid Build Coastguard Worker        driQueryOptionb(&instance->dri_options, "compression_control_enabled");
179*61046927SAndroid Build Coastguard Worker     instance->anv_fake_nonlocal_memory =
180*61046927SAndroid Build Coastguard Worker             driQueryOptionb(&instance->dri_options, "anv_fake_nonlocal_memory");
181*61046927SAndroid Build Coastguard Worker 
182*61046927SAndroid Build Coastguard Worker     instance->stack_ids = driQueryOptioni(&instance->dri_options, "intel_stack_id");
183*61046927SAndroid Build Coastguard Worker     switch (instance->stack_ids) {
184*61046927SAndroid Build Coastguard Worker     case 256:
185*61046927SAndroid Build Coastguard Worker     case 512:
186*61046927SAndroid Build Coastguard Worker     case 1024:
187*61046927SAndroid Build Coastguard Worker     case 2048:
188*61046927SAndroid Build Coastguard Worker        break;
189*61046927SAndroid Build Coastguard Worker     default:
190*61046927SAndroid Build Coastguard Worker        mesa_logw("Invalid value provided for drirc intel_stack_id=%u, reverting to 512.",
191*61046927SAndroid Build Coastguard Worker                  instance->stack_ids);
192*61046927SAndroid Build Coastguard Worker        instance->stack_ids = 512;
193*61046927SAndroid Build Coastguard Worker        break;
194*61046927SAndroid Build Coastguard Worker     }
195*61046927SAndroid Build Coastguard Worker     instance->force_guc_low_latency = driQueryOptionb(&instance->dri_options, "force_guc_low_latency");
196*61046927SAndroid Build Coastguard Worker }
197*61046927SAndroid Build Coastguard Worker 
anv_CreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)198*61046927SAndroid Build Coastguard Worker VkResult anv_CreateInstance(
199*61046927SAndroid Build Coastguard Worker     const VkInstanceCreateInfo*                 pCreateInfo,
200*61046927SAndroid Build Coastguard Worker     const VkAllocationCallbacks*                pAllocator,
201*61046927SAndroid Build Coastguard Worker     VkInstance*                                 pInstance)
202*61046927SAndroid Build Coastguard Worker {
203*61046927SAndroid Build Coastguard Worker    struct anv_instance *instance;
204*61046927SAndroid Build Coastguard Worker    VkResult result;
205*61046927SAndroid Build Coastguard Worker 
206*61046927SAndroid Build Coastguard Worker    assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO);
207*61046927SAndroid Build Coastguard Worker 
208*61046927SAndroid Build Coastguard Worker    if (pAllocator == NULL)
209*61046927SAndroid Build Coastguard Worker       pAllocator = vk_default_allocator();
210*61046927SAndroid Build Coastguard Worker 
211*61046927SAndroid Build Coastguard Worker    instance = vk_alloc(pAllocator, sizeof(*instance), 8,
212*61046927SAndroid Build Coastguard Worker                        VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
213*61046927SAndroid Build Coastguard Worker    if (!instance)
214*61046927SAndroid Build Coastguard Worker       return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY);
215*61046927SAndroid Build Coastguard Worker 
216*61046927SAndroid Build Coastguard Worker    struct vk_instance_dispatch_table dispatch_table;
217*61046927SAndroid Build Coastguard Worker    vk_instance_dispatch_table_from_entrypoints(
218*61046927SAndroid Build Coastguard Worker       &dispatch_table, &anv_instance_entrypoints, true);
219*61046927SAndroid Build Coastguard Worker    vk_instance_dispatch_table_from_entrypoints(
220*61046927SAndroid Build Coastguard Worker       &dispatch_table, &wsi_instance_entrypoints, false);
221*61046927SAndroid Build Coastguard Worker 
222*61046927SAndroid Build Coastguard Worker    result = vk_instance_init(&instance->vk, &instance_extensions,
223*61046927SAndroid Build Coastguard Worker                              &dispatch_table, pCreateInfo, pAllocator);
224*61046927SAndroid Build Coastguard Worker    if (result != VK_SUCCESS) {
225*61046927SAndroid Build Coastguard Worker       vk_free(pAllocator, instance);
226*61046927SAndroid Build Coastguard Worker       return vk_error(NULL, result);
227*61046927SAndroid Build Coastguard Worker    }
228*61046927SAndroid Build Coastguard Worker 
229*61046927SAndroid Build Coastguard Worker    instance->vk.physical_devices.try_create_for_drm = anv_physical_device_try_create;
230*61046927SAndroid Build Coastguard Worker    instance->vk.physical_devices.destroy = anv_physical_device_destroy;
231*61046927SAndroid Build Coastguard Worker 
232*61046927SAndroid Build Coastguard Worker    VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false));
233*61046927SAndroid Build Coastguard Worker 
234*61046927SAndroid Build Coastguard Worker    anv_init_dri_options(instance);
235*61046927SAndroid Build Coastguard Worker 
236*61046927SAndroid Build Coastguard Worker    intel_driver_ds_init();
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker    *pInstance = anv_instance_to_handle(instance);
239*61046927SAndroid Build Coastguard Worker 
240*61046927SAndroid Build Coastguard Worker    return VK_SUCCESS;
241*61046927SAndroid Build Coastguard Worker }
242*61046927SAndroid Build Coastguard Worker 
anv_DestroyInstance(VkInstance _instance,const VkAllocationCallbacks * pAllocator)243*61046927SAndroid Build Coastguard Worker void anv_DestroyInstance(
244*61046927SAndroid Build Coastguard Worker     VkInstance                                  _instance,
245*61046927SAndroid Build Coastguard Worker     const VkAllocationCallbacks*                pAllocator)
246*61046927SAndroid Build Coastguard Worker {
247*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_instance, instance, _instance);
248*61046927SAndroid Build Coastguard Worker 
249*61046927SAndroid Build Coastguard Worker    if (!instance)
250*61046927SAndroid Build Coastguard Worker       return;
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker    VG(VALGRIND_DESTROY_MEMPOOL(instance));
253*61046927SAndroid Build Coastguard Worker 
254*61046927SAndroid Build Coastguard Worker    driDestroyOptionCache(&instance->dri_options);
255*61046927SAndroid Build Coastguard Worker    driDestroyOptionInfo(&instance->available_dri_options);
256*61046927SAndroid Build Coastguard Worker 
257*61046927SAndroid Build Coastguard Worker    vk_instance_finish(&instance->vk);
258*61046927SAndroid Build Coastguard Worker    vk_free(&instance->vk.alloc, instance);
259*61046927SAndroid Build Coastguard Worker }
260*61046927SAndroid Build Coastguard Worker 
anv_GetInstanceProcAddr(VkInstance _instance,const char * pName)261*61046927SAndroid Build Coastguard Worker PFN_vkVoidFunction anv_GetInstanceProcAddr(
262*61046927SAndroid Build Coastguard Worker     VkInstance                                  _instance,
263*61046927SAndroid Build Coastguard Worker     const char*                                 pName)
264*61046927SAndroid Build Coastguard Worker {
265*61046927SAndroid Build Coastguard Worker    ANV_FROM_HANDLE(anv_instance, instance, _instance);
266*61046927SAndroid Build Coastguard Worker    return vk_instance_get_proc_addr(&instance->vk,
267*61046927SAndroid Build Coastguard Worker                                     &anv_instance_entrypoints,
268*61046927SAndroid Build Coastguard Worker                                     pName);
269*61046927SAndroid Build Coastguard Worker }
270*61046927SAndroid Build Coastguard Worker 
271*61046927SAndroid Build Coastguard Worker /* With version 1+ of the loader interface the ICD should expose
272*61046927SAndroid Build Coastguard Worker  * vk_icdGetInstanceProcAddr to work around certain LD_PRELOAD issues seen in apps.
273*61046927SAndroid Build Coastguard Worker  */
274*61046927SAndroid Build Coastguard Worker PUBLIC
vk_icdGetInstanceProcAddr(VkInstance instance,const char * pName)275*61046927SAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(
276*61046927SAndroid Build Coastguard Worker     VkInstance                                  instance,
277*61046927SAndroid Build Coastguard Worker     const char*                                 pName)
278*61046927SAndroid Build Coastguard Worker {
279*61046927SAndroid Build Coastguard Worker    return anv_GetInstanceProcAddr(instance, pName);
280*61046927SAndroid Build Coastguard Worker }
281