@@ -88,7 +88,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
8888 switch (icd_surface -> base .platform ) {
8989#if defined(VK_USE_PLATFORM_WAYLAND_KHR )
9090 case VK_ICD_WSI_PLATFORM_WAYLAND :
91- if (NULL != icd_term -> dispatch .CreateWaylandSurfaceKHR ) {
91+ if (NULL != icd_term -> dispatch .CreateWaylandSurfaceKHR &&
92+ icd_term -> enabled_instance_extensions .khr_wayland_surface ) {
9293 result = icd_term -> dispatch .CreateWaylandSurfaceKHR (
9394 icd_term -> instance , (const VkWaylandSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
9495 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -100,7 +101,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
100101
101102#if defined(VK_USE_PLATFORM_WIN32_KHR )
102103 case VK_ICD_WSI_PLATFORM_WIN32 :
103- if (NULL != icd_term -> dispatch .CreateWin32SurfaceKHR ) {
104+ if (NULL != icd_term -> dispatch .CreateWin32SurfaceKHR &&
105+ icd_term -> enabled_instance_extensions .khr_win32_surface ) {
104106 result = icd_term -> dispatch .CreateWin32SurfaceKHR (
105107 icd_term -> instance , (const VkWin32SurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
106108 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -112,7 +114,7 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
112114
113115#if defined(VK_USE_PLATFORM_XCB_KHR )
114116 case VK_ICD_WSI_PLATFORM_XCB :
115- if (NULL != icd_term -> dispatch .CreateXcbSurfaceKHR ) {
117+ if (NULL != icd_term -> dispatch .CreateXcbSurfaceKHR && icd_term -> enabled_instance_extensions . khr_xcb_surface ) {
116118 result = icd_term -> dispatch .CreateXcbSurfaceKHR (
117119 icd_term -> instance , (const VkXcbSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
118120 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -124,7 +126,7 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
124126
125127#if defined(VK_USE_PLATFORM_XLIB_KHR )
126128 case VK_ICD_WSI_PLATFORM_XLIB :
127- if (NULL != icd_term -> dispatch .CreateXlibSurfaceKHR ) {
129+ if (NULL != icd_term -> dispatch .CreateXlibSurfaceKHR && icd_term -> enabled_instance_extensions . khr_xlib_surface ) {
128130 result = icd_term -> dispatch .CreateXlibSurfaceKHR (
129131 icd_term -> instance , (const VkXlibSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
130132 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -136,7 +138,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
136138
137139#if defined(VK_USE_PLATFORM_MACOS_MVK )
138140 case VK_ICD_WSI_PLATFORM_MACOS :
139- if (NULL != icd_term -> dispatch .CreateMacOSSurfaceMVK ) {
141+ if (NULL != icd_term -> dispatch .CreateMacOSSurfaceMVK &&
142+ icd_term -> enabled_instance_extensions .mvk_macos_surface ) {
140143 result = icd_term -> dispatch .CreateMacOSSurfaceMVK (
141144 icd_term -> instance , (const VkMacOSSurfaceCreateInfoMVK * )icd_surface -> create_info , pAllocator ,
142145 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -147,7 +150,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
147150#endif // VK_USE_PLATFORM_MACOS_MVK
148151
149152 case VK_ICD_WSI_PLATFORM_DISPLAY :
150- if (NULL != icd_term -> dispatch .CreateDisplayPlaneSurfaceKHR ) {
153+ if (NULL != icd_term -> dispatch .CreateDisplayPlaneSurfaceKHR &&
154+ icd_term -> enabled_instance_extensions .khr_display ) {
151155 result = icd_term -> dispatch .CreateDisplayPlaneSurfaceKHR (
152156 icd_term -> instance , (const VkDisplaySurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
153157 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -157,7 +161,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
157161 break ;
158162
159163 case VK_ICD_WSI_PLATFORM_HEADLESS :
160- if (NULL != icd_term -> dispatch .CreateHeadlessSurfaceEXT ) {
164+ if (NULL != icd_term -> dispatch .CreateHeadlessSurfaceEXT &&
165+ icd_term -> enabled_instance_extensions .ext_headless_surface ) {
161166 result = icd_term -> dispatch .CreateHeadlessSurfaceEXT (
162167 icd_term -> instance , (const VkHeadlessSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
163168 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -168,7 +173,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
168173
169174#if defined(VK_USE_PLATFORM_METAL_EXT )
170175 case VK_ICD_WSI_PLATFORM_METAL :
171- if (NULL != icd_term -> dispatch .CreateMetalSurfaceEXT ) {
176+ if (NULL != icd_term -> dispatch .CreateMetalSurfaceEXT &&
177+ icd_term -> enabled_instance_extensions .ext_metal_surface ) {
172178 result = icd_term -> dispatch .CreateMetalSurfaceEXT (
173179 icd_term -> instance , (const VkMetalSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
174180 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -180,7 +186,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
180186
181187#if defined(VK_USE_PLATFORM_DIRECTFB_EXT )
182188 case VK_ICD_WSI_PLATFORM_DIRECTFB :
183- if (NULL != icd_term -> dispatch .CreateDirectFBSurfaceEXT ) {
189+ if (NULL != icd_term -> dispatch .CreateDirectFBSurfaceEXT &&
190+ icd_term -> enabled_instance_extensions .ext_directfb_surface ) {
184191 result = icd_term -> dispatch .CreateDirectFBSurfaceEXT (
185192 icd_term -> instance , (const VkDirectFBSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
186193 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -192,7 +199,7 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
192199
193200#if defined(VK_USE_PLATFORM_VI_NN )
194201 case VK_ICD_WSI_PLATFORM_VI :
195- if (NULL != icd_term -> dispatch .CreateViSurfaceNN ) {
202+ if (NULL != icd_term -> dispatch .CreateViSurfaceNN && icd_term -> enabled_instance_extensions . nn_vi_surface ) {
196203 result = icd_term -> dispatch .CreateViSurfaceNN (
197204 icd_term -> instance , (const VkViSurfaceCreateInfoNN * )icd_surface -> create_info , pAllocator ,
198205 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -204,7 +211,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
204211
205212#if defined(VK_USE_PLATFORM_GGP )
206213 case VK_ICD_WSI_PLATFORM_GGP :
207- if (NULL != icd_term -> dispatch .CreateStreamDescriptorSurfaceGGP ) {
214+ if (NULL != icd_term -> dispatch .CreateStreamDescriptorSurfaceGGP &&
215+ icd_term -> enabled_instance_extensions .qnx_screen_surface ) {
208216 result = icd_term -> dispatch .CreateStreamDescriptorSurfaceGGP (
209217 icd_term -> instance , (const VkStreamDescriptorSurfaceCreateInfoGGP * )icd_surface -> create_info ,
210218 pAllocator , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -216,7 +224,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
216224
217225#if defined(VK_USE_PLATFORM_SCREEN_QNX )
218226 case VK_ICD_WSI_PLATFORM_SCREEN :
219- if (NULL != icd_term -> dispatch .CreateScreenSurfaceQNX ) {
227+ if (NULL != icd_term -> dispatch .CreateScreenSurfaceQNX &&
228+ icd_term -> enabled_instance_extensions .qnx_screen_surface ) {
220229 result = icd_term -> dispatch .CreateScreenSurfaceQNX (
221230 icd_term -> instance , (const VkScreenSurfaceCreateInfoQNX * )icd_surface -> create_info , pAllocator ,
222231 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -228,7 +237,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
228237
229238#if defined(VK_USE_PLATFORM_FUCHSIA )
230239 case VK_ICD_WSI_PLATFORM_FUCHSIA :
231- if (NULL != icd_term -> dispatch .CreateImagePipeSurfaceFUCHSIA ) {
240+ if (NULL != icd_term -> dispatch .CreateImagePipeSurfaceFUCHSIA &&
241+ icd_term -> enabled_instance_extensions .fuchsia_imagepipe_surface ) {
232242 result = icd_term -> dispatch .CreateImagePipeSurfaceFUCHSIA (
233243 icd_term -> instance , (const VkImagePipeSurfaceCreateInfoFUCHSIA * )icd_surface -> create_info , pAllocator ,
234244 & icd_term -> surface_list .list [icd_surface -> surface_index ]);
@@ -302,12 +312,13 @@ VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkS
302312 VkIcdSurface * icd_surface = (VkIcdSurface * )(uintptr_t )(surface );
303313 if (NULL != icd_surface ) {
304314 for (struct loader_icd_term * icd_term = loader_inst -> icd_terms ; icd_term != NULL ; icd_term = icd_term -> next ) {
305- if (icd_term -> scanned_icd -> interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR ) {
306- if (NULL != icd_term -> dispatch .DestroySurfaceKHR && icd_term -> surface_list .list [icd_surface -> surface_index ]) {
307- icd_term -> dispatch .DestroySurfaceKHR (icd_term -> instance ,
308- icd_term -> surface_list .list [icd_surface -> surface_index ], pAllocator );
309- icd_term -> surface_list .list [icd_surface -> surface_index ] = (VkSurfaceKHR )(uintptr_t )NULL ;
310- }
315+ if (icd_term -> enabled_instance_extensions .khr_surface &&
316+ icd_term -> scanned_icd -> interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR &&
317+ NULL != icd_term -> dispatch .DestroySurfaceKHR && icd_term -> surface_list .list [icd_surface -> surface_index ]) {
318+ icd_term -> dispatch .DestroySurfaceKHR (icd_term -> instance , icd_term -> surface_list .list [icd_surface -> surface_index ],
319+ pAllocator );
320+ icd_term -> surface_list .list [icd_surface -> surface_index ] = (VkSurfaceKHR )(uintptr_t )NULL ;
321+
311322 } else {
312323 // The real_icd_surface for any ICD not supporting the
313324 // proper interface version should be NULL. If not, then
@@ -671,7 +682,8 @@ VkResult allocate_icd_surface_struct(struct loader_instance *instance, size_t ba
671682 icd_surface -> create_info = NULL ;
672683
673684 for (struct loader_icd_term * icd_term = instance -> icd_terms ; icd_term != NULL ; icd_term = icd_term -> next ) {
674- if (icd_term -> scanned_icd -> interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR ) {
685+ if (icd_term -> enabled_instance_extensions .khr_surface &&
686+ icd_term -> scanned_icd -> interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR ) {
675687 if (icd_term -> surface_list .list == NULL ) {
676688 res =
677689 loader_init_generic_list (instance , (struct loader_generic_list * )& icd_term -> surface_list , sizeof (VkSurfaceKHR ));
@@ -756,7 +768,7 @@ void cleanup_surface_creation(struct loader_instance *loader_inst, VkResult resu
756768 const VkAllocationCallbacks * pAllocator ) {
757769 if (VK_SUCCESS != result && NULL != icd_surface ) {
758770 for (struct loader_icd_term * icd_term = loader_inst -> icd_terms ; icd_term != NULL ; icd_term = icd_term -> next ) {
759- if (NULL != icd_term -> surface_list .list &&
771+ if (icd_term -> enabled_instance_extensions . khr_surface && NULL != icd_term -> surface_list .list &&
760772 icd_term -> surface_list .capacity > icd_surface -> surface_index * sizeof (VkSurfaceKHR ) &&
761773 icd_term -> surface_list .list [icd_surface -> surface_index ] && NULL != icd_term -> dispatch .DestroySurfaceKHR ) {
762774 icd_term -> dispatch .DestroySurfaceKHR (icd_term -> instance , icd_term -> surface_list .list [icd_surface -> surface_index ],
0 commit comments