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
case VK_IMAGE_ASPECT_STENCIL_BIT:
switch(format)
{
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
......@@ -211,6 +212,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_0_BIT:
switch(format)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM;
......@@ -223,8 +225,10 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_1_BIT:
switch(format)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM;
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return VK_FORMAT_R8G8_UNORM;
default:
......@@ -236,6 +240,7 @@ Format Format::getAspectFormat(VkImageAspectFlags aspect) const
case VK_IMAGE_ASPECT_PLANE_2_BIT:
switch(format)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return VK_FORMAT_R8_UNORM;
default:
......
......@@ -253,7 +253,8 @@ const Image* ImageView::getImage(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
......
......@@ -451,8 +451,10 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
pFormatProperties->optimalTilingFeatures |=
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
VK_FORMAT_FEATURE_BLIT_SRC_BIT |
......@@ -557,6 +559,7 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
VK_FORMAT_FEATURE_BLIT_DST_BIT;
break;
case VK_FORMAT_S8_UINT:
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_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