The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

a/vk: Get and show some external buffer data on startup, too.

+70
+50
src/xrt/auxiliary/vk/vk_bundle_init.c
··· 182 182 } 183 183 184 184 static bool 185 + is_buffer_bit_supported(struct vk_bundle *vk, 186 + VkExternalMemoryHandleTypeFlagBits handle_type, 187 + VkExternalMemoryFeatureFlagBits bits) 188 + { 189 + VkPhysicalDeviceExternalBufferInfo external_buffer_info = { 190 + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, 191 + .handleType = handle_type, 192 + }; 193 + VkExternalBufferProperties external_buffer_props = { 194 + .sType = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, 195 + }; 196 + 197 + vk->vkGetPhysicalDeviceExternalBufferPropertiesKHR( // 198 + vk->physical_device, // physicalDevice 199 + &external_buffer_info, // pExternalBufferInfo 200 + &external_buffer_props); // pExternalBufferProperties 201 + 202 + // const VkExternalMemoryFeatureFlagBits bits = // 203 + // VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | // 204 + // VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; // 205 + 206 + VkExternalFenceFeatureFlagBits masked = 207 + bits & external_buffer_props.externalMemoryProperties.externalMemoryFeatures; 208 + // All must be supported. 209 + return masked == bits; 210 + } 211 + 212 + static bool 213 + is_buffer_bit_supported_for_import(struct vk_bundle *vk, VkExternalMemoryHandleTypeFlagBits handle_type) 214 + { 215 + return is_buffer_bit_supported(vk, handle_type, VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT); 216 + } 217 + 218 + static bool 219 + is_buffer_bit_supported_for_export(struct vk_bundle *vk, VkExternalMemoryHandleTypeFlagBits handle_type) 220 + { 221 + return is_buffer_bit_supported(vk, handle_type, VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT); 222 + } 223 + 224 + static bool 185 225 is_fence_bit_supported(struct vk_bundle *vk, VkExternalFenceHandleTypeFlagBits handle_type) 186 226 { 187 227 VkPhysicalDeviceExternalFenceInfo external_fence_info = { ··· 313 353 VK_WARN(vk, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR not supported, should always be."); 314 354 return; 315 355 } 356 + #if defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_WIN32_HANDLE) 357 + vk->external.buffer_import_opaque_win32 = 358 + is_buffer_bit_supported_for_import(vk, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT); 359 + vk->external.buffer_export_opaque_win32 = 360 + is_buffer_bit_supported_for_export(vk, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT); 316 361 362 + vk->external.buffer_import_d3d11 = 363 + is_buffer_bit_supported_for_import(vk, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT); 364 + vk->external.buffer_export_d3d11 = 365 + is_buffer_bit_supported_for_export(vk, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT); 366 + #endif 317 367 #if defined(XRT_GRAPHICS_SYNC_HANDLE_IS_FD) 318 368 319 369 vk->external.fence_sync_fd = is_fence_bit_supported( //
+8
src/xrt/auxiliary/vk/vk_helpers.h
··· 61 61 62 62 struct 63 63 { 64 + #if defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_WIN32_HANDLE) 65 + bool buffer_import_opaque_win32; 66 + bool buffer_export_opaque_win32; 67 + 68 + bool buffer_import_d3d11; 69 + bool buffer_export_d3d11; 70 + #endif 71 + 64 72 #if defined(XRT_GRAPHICS_SYNC_HANDLE_IS_FD) 65 73 bool fence_sync_fd; 66 74 bool fence_opaque_fd;
+12
src/xrt/auxiliary/vk/vk_print.c
··· 63 63 void 64 64 vk_print_external_handles_info(struct vk_bundle *vk, enum u_logging_level log_level) 65 65 { 66 + 67 + #if defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_WIN32_HANDLE) 68 + U_LOG_IFL(log_level, vk->log_level, // 69 + "Supported buffers:\n\t%s: import=%s export=%s\n\t%s: import=%s export=%s", // 70 + "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT", // 71 + vk->external.buffer_import_opaque_win32 ? "true" : "false", // 72 + vk->external.buffer_export_opaque_win32 ? "true" : "false", // 73 + "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT", // 74 + vk->external.buffer_import_d3d11 ? "true" : "false", // 75 + vk->external.buffer_export_d3d11 ? "true" : "false"); // 76 + #endif 77 + 66 78 #if defined(XRT_GRAPHICS_SYNC_HANDLE_IS_FD) 67 79 68 80 U_LOG_IFL(log_level, vk->log_level, //