The open source OpenXR runtime
0
fork

Configure Feed

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

c/client: Use correct VkImageAspectFlags in barriers

+41 -5
+28
src/xrt/auxiliary/vk/vk_helpers.c
··· 1894 1894 } 1895 1895 } 1896 1896 1897 + VkImageAspectFlags 1898 + vk_swapchain_aspect_mask(VkFormat format) 1899 + { 1900 + switch (format) { 1901 + case VK_FORMAT_D16_UNORM: 1902 + case VK_FORMAT_D32_SFLOAT: 1903 + case VK_FORMAT_D24_UNORM_S8_UINT: 1904 + case VK_FORMAT_D32_SFLOAT_S8_UINT: // 1905 + return VK_IMAGE_ASPECT_DEPTH_BIT; 1906 + break; 1907 + case VK_FORMAT_R16G16B16A16_UNORM: 1908 + case VK_FORMAT_R16G16B16A16_SFLOAT: 1909 + case VK_FORMAT_R16G16B16_UNORM: 1910 + case VK_FORMAT_R16G16B16_SFLOAT: 1911 + case VK_FORMAT_R8G8B8A8_SRGB: 1912 + case VK_FORMAT_B8G8R8A8_SRGB: 1913 + case VK_FORMAT_R8G8B8_SRGB: 1914 + case VK_FORMAT_R8G8B8A8_UNORM: 1915 + case VK_FORMAT_B8G8R8A8_UNORM: 1916 + case VK_FORMAT_R8G8B8_UNORM: 1917 + case VK_FORMAT_B8G8R8_UNORM: // 1918 + return VK_IMAGE_ASPECT_COLOR_BIT; 1919 + break; 1920 + default: // 1921 + assert(false && !"Format not supported!"); 1922 + } 1923 + } 1924 + 1897 1925 static bool 1898 1926 check_feature(VkFormat format, 1899 1927 enum xrt_swapchain_usage_bits usage,
+7
src/xrt/auxiliary/vk/vk_helpers.h
··· 655 655 VkAccessFlags 656 656 vk_get_access_flags(VkImageLayout layout); 657 657 658 + 658 659 VkAccessFlags 659 660 vk_swapchain_access_flags(enum xrt_swapchain_usage_bits bits); 660 661 ··· 663 664 */ 664 665 VkImageLayout 665 666 vk_swapchain_optimal_layout(VkFormat format); 667 + 668 + /*! 669 + * Return the aspect mask for this format, only supports colour and depth. 670 + */ 671 + VkImageAspectFlags 672 + vk_swapchain_aspect_mask(VkFormat format); 666 673 667 674 /*! 668 675 * Always adds `VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT` and
+6 -5
src/xrt/compositor/client/comp_vk_client.c
··· 421 421 return XRT_ERROR_VULKAN; 422 422 } 423 423 424 + VkAccessFlags client_access = vk_swapchain_access_flags(info->bits); 425 + VkImageLayout client_layout = vk_swapchain_optimal_layout(info->format); 426 + VkImageAspectFlags client_aspect = vk_swapchain_aspect_mask(info->format); 427 + 424 428 VkImageSubresourceRange subresource_range = { 425 - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, 429 + .aspectMask = client_aspect, 426 430 .baseMipLevel = 0, 427 431 .levelCount = VK_REMAINING_MIP_LEVELS, 428 432 .baseArrayLayer = 0, 429 433 .layerCount = VK_REMAINING_ARRAY_LAYERS, 430 434 }; 431 - 432 - VkAccessFlags client_access = vk_swapchain_access_flags(info->bits); 433 - VkImageLayout client_layout = vk_swapchain_optimal_layout(info->format); 434 435 435 436 struct client_vk_swapchain *sc = U_TYPED_CALLOC(struct client_vk_swapchain); 436 437 sc->base.base.destroy = client_vk_swapchain_destroy; ··· 484 485 } 485 486 486 487 VkImageSubresourceRange subresource_range = { 487 - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, 488 + .aspectMask = client_aspect, 488 489 .baseMipLevel = 0, 489 490 .levelCount = VK_REMAINING_MIP_LEVELS, 490 491 .baseArrayLayer = 0,