@@ -82,15 +82,16 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
8282
8383 VkResult result = VK_SUCCESS ;
8484 if (icd_term -> scanned_icd -> interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR ) {
85+ VkAllocationCallbacks * pAllocator = icd_surface -> callbacks_valid ? & icd_surface -> callbacks : NULL ;
8586 if (VK_NULL_HANDLE == icd_term -> surface_list .list [icd_surface -> surface_index ]) {
8687 // If the surface does not exist yet for the target ICD, then create it lazily
8788 switch (icd_surface -> base .platform ) {
8889#if defined(VK_USE_PLATFORM_WAYLAND_KHR )
8990 case VK_ICD_WSI_PLATFORM_WAYLAND :
9091 if (NULL != icd_term -> dispatch .CreateWaylandSurfaceKHR ) {
9192 result = icd_term -> dispatch .CreateWaylandSurfaceKHR (
92- icd_term -> instance , (const VkWaylandSurfaceCreateInfoKHR * )icd_surface -> create_info ,
93- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
93+ icd_term -> instance , (const VkWaylandSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
94+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
9495 } else {
9596 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
9697 }
@@ -101,8 +102,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
101102 case VK_ICD_WSI_PLATFORM_WIN32 :
102103 if (NULL != icd_term -> dispatch .CreateWin32SurfaceKHR ) {
103104 result = icd_term -> dispatch .CreateWin32SurfaceKHR (
104- icd_term -> instance , (const VkWin32SurfaceCreateInfoKHR * )icd_surface -> create_info ,
105- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
105+ icd_term -> instance , (const VkWin32SurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
106+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
106107 } else {
107108 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
108109 }
@@ -113,8 +114,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
113114 case VK_ICD_WSI_PLATFORM_XCB :
114115 if (NULL != icd_term -> dispatch .CreateXcbSurfaceKHR ) {
115116 result = icd_term -> dispatch .CreateXcbSurfaceKHR (
116- icd_term -> instance , (const VkXcbSurfaceCreateInfoKHR * )icd_surface -> create_info ,
117- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
117+ icd_term -> instance , (const VkXcbSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
118+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
118119 } else {
119120 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
120121 }
@@ -125,8 +126,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
125126 case VK_ICD_WSI_PLATFORM_XLIB :
126127 if (NULL != icd_term -> dispatch .CreateXlibSurfaceKHR ) {
127128 result = icd_term -> dispatch .CreateXlibSurfaceKHR (
128- icd_term -> instance , (const VkXlibSurfaceCreateInfoKHR * )icd_surface -> create_info ,
129- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
129+ icd_term -> instance , (const VkXlibSurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
130+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
130131 } else {
131132 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
132133 }
@@ -137,8 +138,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
137138 case VK_ICD_WSI_PLATFORM_MACOS :
138139 if (NULL != icd_term -> dispatch .CreateMacOSSurfaceMVK ) {
139140 result = icd_term -> dispatch .CreateMacOSSurfaceMVK (
140- icd_term -> instance , (const VkMacOSSurfaceCreateInfoMVK * )icd_surface -> create_info ,
141- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
141+ icd_term -> instance , (const VkMacOSSurfaceCreateInfoMVK * )icd_surface -> create_info , pAllocator ,
142+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
142143 } else {
143144 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
144145 }
@@ -148,8 +149,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
148149 case VK_ICD_WSI_PLATFORM_DISPLAY :
149150 if (NULL != icd_term -> dispatch .CreateDisplayPlaneSurfaceKHR ) {
150151 result = icd_term -> dispatch .CreateDisplayPlaneSurfaceKHR (
151- icd_term -> instance , (const VkDisplaySurfaceCreateInfoKHR * )icd_surface -> create_info ,
152- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
152+ icd_term -> instance , (const VkDisplaySurfaceCreateInfoKHR * )icd_surface -> create_info , pAllocator ,
153+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
153154 } else {
154155 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
155156 }
@@ -158,8 +159,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
158159 case VK_ICD_WSI_PLATFORM_HEADLESS :
159160 if (NULL != icd_term -> dispatch .CreateHeadlessSurfaceEXT ) {
160161 result = icd_term -> dispatch .CreateHeadlessSurfaceEXT (
161- icd_term -> instance , (const VkHeadlessSurfaceCreateInfoEXT * )icd_surface -> create_info ,
162- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
162+ icd_term -> instance , (const VkHeadlessSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
163+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
163164 } else {
164165 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
165166 }
@@ -169,8 +170,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
169170 case VK_ICD_WSI_PLATFORM_METAL :
170171 if (NULL != icd_term -> dispatch .CreateMetalSurfaceEXT ) {
171172 result = icd_term -> dispatch .CreateMetalSurfaceEXT (
172- icd_term -> instance , (const VkMetalSurfaceCreateInfoEXT * )icd_surface -> create_info ,
173- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
173+ icd_term -> instance , (const VkMetalSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
174+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
174175 } else {
175176 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
176177 }
@@ -181,8 +182,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
181182 case VK_ICD_WSI_PLATFORM_DIRECTFB :
182183 if (NULL != icd_term -> dispatch .CreateDirectFBSurfaceEXT ) {
183184 result = icd_term -> dispatch .CreateDirectFBSurfaceEXT (
184- icd_term -> instance , (const VkDirectFBSurfaceCreateInfoEXT * )icd_surface -> create_info ,
185- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
185+ icd_term -> instance , (const VkDirectFBSurfaceCreateInfoEXT * )icd_surface -> create_info , pAllocator ,
186+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
186187 } else {
187188 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
188189 }
@@ -193,8 +194,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
193194 case VK_ICD_WSI_PLATFORM_VI :
194195 if (NULL != icd_term -> dispatch .CreateViSurfaceNN ) {
195196 result = icd_term -> dispatch .CreateViSurfaceNN (
196- icd_term -> instance , (const VkViSurfaceCreateInfoNN * )icd_surface -> create_info ,
197- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
197+ icd_term -> instance , (const VkViSurfaceCreateInfoNN * )icd_surface -> create_info , pAllocator ,
198+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
198199 } else {
199200 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
200201 }
@@ -206,7 +207,7 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
206207 if (NULL != icd_term -> dispatch .CreateStreamDescriptorSurfaceGGP ) {
207208 result = icd_term -> dispatch .CreateStreamDescriptorSurfaceGGP (
208209 icd_term -> instance , (const VkStreamDescriptorSurfaceCreateInfoGGP * )icd_surface -> create_info ,
209- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
210+ pAllocator , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
210211 } else {
211212 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
212213 }
@@ -217,8 +218,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
217218 case VK_ICD_WSI_PLATFORM_SCREEN :
218219 if (NULL != icd_term -> dispatch .CreateScreenSurfaceQNX ) {
219220 result = icd_term -> dispatch .CreateScreenSurfaceQNX (
220- icd_term -> instance , (const VkScreenSurfaceCreateInfoQNX * )icd_surface -> create_info ,
221- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
221+ icd_term -> instance , (const VkScreenSurfaceCreateInfoQNX * )icd_surface -> create_info , pAllocator ,
222+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
222223 } else {
223224 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
224225 }
@@ -229,8 +230,8 @@ VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *
229230 case VK_ICD_WSI_PLATFORM_FUCHSIA :
230231 if (NULL != icd_term -> dispatch .CreateImagePipeSurfaceFUCHSIA ) {
231232 result = icd_term -> dispatch .CreateImagePipeSurfaceFUCHSIA (
232- icd_term -> instance , (const VkImagePipeSurfaceCreateInfoFUCHSIA * )icd_surface -> create_info ,
233- & icd_term -> this_instance -> alloc_callbacks , & icd_term -> surface_list .list [icd_surface -> surface_index ]);
233+ icd_term -> instance , (const VkImagePipeSurfaceCreateInfoFUCHSIA * )icd_surface -> create_info , pAllocator ,
234+ & icd_term -> surface_list .list [icd_surface -> surface_index ]);
234235 } else {
235236 result = VK_ERROR_EXTENSION_NOT_PRESENT ;
236237 }
@@ -754,7 +755,7 @@ VkResult allocate_icd_surface_struct(struct loader_instance *instance, size_t ba
754755 }
755756
756757 // Next, if so, proceed with the implementation of this function:
757- icd_surface = loader_instance_heap_alloc (instance , sizeof (VkIcdSurface ), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT );
758+ icd_surface = loader_instance_heap_calloc (instance , sizeof (VkIcdSurface ), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT );
758759 if (icd_surface == NULL ) {
759760 res = VK_ERROR_OUT_OF_HOST_MEMORY ;
760761 goto out ;
@@ -796,7 +797,7 @@ VkResult allocate_icd_surface_struct(struct loader_instance *instance, size_t ba
796797
797798VkResult copy_surface_create_info (struct loader_instance * loader_inst , VkIcdSurface * icd_surface , const void * create_info ,
798799 size_t struct_type_info_count , const struct loader_struct_type_info * struct_type_info ,
799- const char * base_struct_name ) {
800+ const char * base_struct_name , const VkAllocationCallbacks * pAllocator ) {
800801 size_t create_info_total_size = 0 ;
801802 const void * pnext = create_info ;
802803 while (NULL != pnext ) {
@@ -842,6 +843,10 @@ VkResult copy_surface_create_info(struct loader_instance *loader_inst, VkIcdSurf
842843 }
843844 }
844845 }
846+ if (pAllocator ) {
847+ icd_surface -> callbacks_valid = true;
848+ icd_surface -> callbacks = * pAllocator ;
849+ }
845850
846851 return VK_SUCCESS ;
847852}
@@ -922,7 +927,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance insta
922927 {VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR , sizeof (VkWin32SurfaceCreateInfoKHR )},
923928 };
924929 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
925- "VkWin32SurfaceCreateInfoKHR" );
930+ "VkWin32SurfaceCreateInfoKHR" , pAllocator );
926931
927932 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
928933
@@ -1021,7 +1026,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance ins
10211026 {VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR , sizeof (VkWaylandSurfaceCreateInfoKHR )},
10221027 };
10231028 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1024- "VkWaylandSurfaceCreateInfoKHR" );
1029+ "VkWaylandSurfaceCreateInfoKHR" , pAllocator );
10251030
10261031 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
10271032
@@ -1124,7 +1129,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instanc
11241129 {VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR , sizeof (VkXcbSurfaceCreateInfoKHR )},
11251130 };
11261131 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1127- "VkXcbSurfaceCreateInfoKHR" );
1132+ "VkXcbSurfaceCreateInfoKHR" , pAllocator );
11281133
11291134 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
11301135
@@ -1230,7 +1235,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instan
12301235 {VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR , sizeof (VkXlibSurfaceCreateInfoKHR )},
12311236 };
12321237 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1233- "VkXlibSurfaceCreateInfoKHR" );
1238+ "VkXlibSurfaceCreateInfoKHR" , pAllocator );
12341239
12351240 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
12361241
@@ -1335,7 +1340,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDirectFBSurfaceEXT(VkInstance in
13351340 {VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT , sizeof (VkDirectFBSurfaceCreateInfoEXT )},
13361341 };
13371342 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1338- "VkDirectFBSurfaceCreateInfoEXT" );
1343+ "VkDirectFBSurfaceCreateInfoEXT" , pAllocator );
13391344
13401345 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
13411346
@@ -1483,7 +1488,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateHeadlessSurfaceEXT(VkInstance in
14831488 {VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT , sizeof (VkHeadlessSurfaceCreateInfoEXT )},
14841489 };
14851490 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1486- "VkHeadlessSurfaceCreateInfoEXT" );
1491+ "VkHeadlessSurfaceCreateInfoEXT" , pAllocator );
14871492
14881493 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
14891494
@@ -1569,7 +1574,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMacOSSurfaceMVK(VkInstance insta
15691574 {VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK , sizeof (VkMacOSSurfaceCreateInfoMVK )},
15701575 };
15711576 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1572- "VkMacOSSurfaceCreateInfoMVK" );
1577+ "VkMacOSSurfaceCreateInfoMVK" , pAllocator );
15731578
15741579 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
15751580
@@ -1680,7 +1685,7 @@ terminator_CreateStreamDescriptorSurfaceGGP(VkInstance instance, const VkStreamD
16801685 {VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP , sizeof (VkStreamDescriptorSurfaceCreateInfoGGP )},
16811686 };
16821687 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1683- "VkStreamDescriptorSurfaceCreateInfoGGP" );
1688+ "VkStreamDescriptorSurfaceCreateInfoGGP" , pAllocator );
16841689
16851690 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
16861691
@@ -1735,7 +1740,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMetalSurfaceEXT(VkInstance insta
17351740 {VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT , sizeof (VkMetalSurfaceCreateInfoEXT )},
17361741 };
17371742 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1738- "VkMetalSurfaceCreateInfoEXT" );
1743+ "VkMetalSurfaceCreateInfoEXT" , pAllocator );
17391744
17401745 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
17411746
@@ -1796,7 +1801,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateScreenSurfaceQNX(VkInstance inst
17961801 {VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX , sizeof (VkScreenSurfaceCreateInfoQNX )},
17971802 };
17981803 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1799- "VkScreenSurfaceCreateInfoQNX" );
1804+ "VkScreenSurfaceCreateInfoQNX" , pAllocator );
18001805
18011806 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
18021807
@@ -1896,7 +1901,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateViSurfaceNN(VkInstance instance,
18961901 {VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN , sizeof (VkViSurfaceCreateInfoNN )},
18971902 };
18981903 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
1899- "VkViSurfaceCreateInfoNN" );
1904+ "VkViSurfaceCreateInfoNN" , pAllocator );
19001905
19011906 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
19021907
@@ -2210,7 +2215,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstanc
22102215 {VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV , sizeof (VkDisplaySurfaceStereoCreateInfoNV )},
22112216 };
22122217 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
2213- "VkDisplaySurfaceCreateInfoKHR" );
2218+ "VkDisplaySurfaceCreateInfoKHR" , pAllocator );
22142219
22152220 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
22162221
@@ -2639,7 +2644,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateImagePipeSurfaceFUCHSIA(VkInstan
26392644 {VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA , sizeof (VkImagePipeSurfaceCreateInfoFUCHSIA )},
26402645 };
26412646 copy_surface_create_info (loader_inst , icd_surface , pCreateInfo , sizeof (ci_types ) / sizeof (ci_types [0 ]), ci_types ,
2642- "VkImagePipeSurfaceCreateInfoFUCHSIA" );
2647+ "VkImagePipeSurfaceCreateInfoFUCHSIA" , pAllocator );
26432648
26442649 * pSurface = (VkSurfaceKHR )(uintptr_t )icd_surface ;
26452650
0 commit comments