Commit 9c18a977 by Alexis Hetu Committed by Alexis Hétu

Enable sampling a depth-stencil format

ANGLE needs to be able to use the depth buffer in a sampled texture to emulate some GLES2 features, even when the image also contains a stencil. Added support for sampling the depth+stencil format we support. Tests: dEQP-VK.* Bug b/141304420 Change-Id: Ia4ccce2a155aa16178f16eb92efae9fc357b6e45 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/36449 Presubmit-Ready: Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 44f462b0
...@@ -196,6 +196,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const ...@@ -196,6 +196,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_STENCIL_BIT: case VK_IMAGE_ASPECT_STENCIL_BIT:
switch(format) switch(format)
{ {
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM_S8_UINT: case VK_FORMAT_D16_UNORM_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D32_SFLOAT_S8_UINT: case VK_FORMAT_D32_SFLOAT_S8_UINT:
...@@ -211,6 +212,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const ...@@ -211,6 +212,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_0_BIT: case VK_IMAGE_ASPECT_PLANE_0_BIT:
switch(format) switch(format)
{ {
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM; return VK_FORMAT_R8_UNORM;
...@@ -223,8 +225,10 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const ...@@ -223,8 +225,10 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_1_BIT: case VK_IMAGE_ASPECT_PLANE_1_BIT:
switch(format) switch(format)
{ {
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM; return VK_FORMAT_R8_UNORM;
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return VK_FORMAT_R8G8_UNORM; return VK_FORMAT_R8G8_UNORM;
default: default:
...@@ -236,6 +240,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const ...@@ -236,6 +240,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_2_BIT: case VK_IMAGE_ASPECT_PLANE_2_BIT:
switch(format) switch(format)
{ {
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM; return VK_FORMAT_R8_UNORM;
default: default:
......
...@@ -253,7 +253,8 @@ const Image* ImageView::getImage(Usage usage) const ...@@ -253,7 +253,8 @@ const Image* ImageView::getImage(Usage usage) const
Format ImageView::getFormat(Usage usage) const Format ImageView::getFormat(Usage usage) const
{ {
return ((usage == RAW) || (getImage(usage) == image)) ? format : getImage(usage)->getFormat(); Format imageFormat = ((usage == RAW) || (getImage(usage) == image)) ? format : getImage(usage)->getFormat();
return imageFormat.getAspectFormat(subresourceRange.aspectMask);
} }
int ImageView::rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel, Usage usage) const int ImageView::rowPitchBytes(VkImageAspectFlagBits aspect, uint32_t mipLevel, Usage usage) const
......
...@@ -451,8 +451,10 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor ...@@ -451,8 +451,10 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor
case VK_FORMAT_R32G32B32A32_UINT: case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT: case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT: case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM: case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D32_SFLOAT: case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
pFormatProperties->optimalTilingFeatures |= pFormatProperties->optimalTilingFeatures |=
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT |
...@@ -557,6 +559,7 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor ...@@ -557,6 +559,7 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
VK_FORMAT_FEATURE_BLIT_DST_BIT; VK_FORMAT_FEATURE_BLIT_DST_BIT;
break; break;
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM: case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D32_SFLOAT: // Note: either VK_FORMAT_D32_SFLOAT or VK_FORMAT_X8_D24_UNORM_PACK32 must be supported case VK_FORMAT_D32_SFLOAT: // Note: either VK_FORMAT_D32_SFLOAT or VK_FORMAT_X8_D24_UNORM_PACK32 must be supported
case VK_FORMAT_D32_SFLOAT_S8_UINT: // Note: either VK_FORMAT_D24_UNORM_S8_UINT or VK_FORMAT_D32_SFLOAT_S8_UINT must be supported case VK_FORMAT_D32_SFLOAT_S8_UINT: // Note: either VK_FORMAT_D24_UNORM_S8_UINT or VK_FORMAT_D32_SFLOAT_S8_UINT must be supported
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment