Commit 762741be by Hernan Liatis

Add support for R8_SRGB textures

This texture format is needed to run the PowerVR Glass demo Bug: b/136178423 Tests: dEQP-VK.*r8_srgb* Change-Id: Ifff800e25db69daf099ce9c748a6c16de6d93db1 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/33449Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarHernan Liatis <hliatis@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 6d874f05
...@@ -275,6 +275,7 @@ namespace sw ...@@ -275,6 +275,7 @@ namespace sw
break; break;
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_UINT: case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SRGB:
c.x = Float(Int(*Pointer<Byte>(element))); c.x = Float(Int(*Pointer<Byte>(element)));
c.w = float(0xFF); c.w = float(0xFF);
break; break;
...@@ -627,7 +628,6 @@ namespace sw ...@@ -627,7 +628,6 @@ namespace sw
case VK_FORMAT_R8_SINT: case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_SSCALED: case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_SRGB:
if(writeR) { *Pointer<SByte>(element) = SByte(RoundInt(Float(c.x))); } if(writeR) { *Pointer<SByte>(element) = SByte(RoundInt(Float(c.x))); }
break; break;
case VK_FORMAT_R8G8B8_UINT: case VK_FORMAT_R8G8B8_UINT:
...@@ -641,6 +641,7 @@ namespace sw ...@@ -641,6 +641,7 @@ namespace sw
case VK_FORMAT_R8_UINT: case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_USCALED: case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SRGB:
if(writeR) { *Pointer<Byte>(element) = Byte(RoundInt(Float(c.x))); } if(writeR) { *Pointer<Byte>(element) = Byte(RoundInt(Float(c.x))); }
break; break;
case VK_FORMAT_R16G16B16A16_SINT: case VK_FORMAT_R16G16B16A16_SINT:
......
...@@ -184,6 +184,7 @@ namespace sw ...@@ -184,6 +184,7 @@ namespace sw
case VK_FORMAT_A8B8G8R8_UNORM_PACK32: case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
case VK_FORMAT_B8G8R8A8_SRGB: case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_R8G8B8A8_SRGB: case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R8_SRGB:
c.x *= Float4(1.0f / 0xFF00u); c.x *= Float4(1.0f / 0xFF00u);
c.y *= Float4(1.0f / 0xFF00u); c.y *= Float4(1.0f / 0xFF00u);
c.z *= Float4(1.0f / 0xFF00u); c.z *= Float4(1.0f / 0xFF00u);
...@@ -235,6 +236,7 @@ namespace sw ...@@ -235,6 +236,7 @@ namespace sw
case VK_FORMAT_A8B8G8R8_UNORM_PACK32: case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
case VK_FORMAT_B8G8R8A8_SRGB: case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_R8G8B8A8_SRGB: case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R8_SRGB:
c.x = Float4(As<UShort4>(cs.x)) * Float4(1.0f / 0xFF00u); c.x = Float4(As<UShort4>(cs.x)) * Float4(1.0f / 0xFF00u);
c.y = Float4(As<UShort4>(cs.y)) * Float4(1.0f / 0xFF00u); c.y = Float4(As<UShort4>(cs.y)) * Float4(1.0f / 0xFF00u);
c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xFF00u); c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xFF00u);
...@@ -1491,6 +1493,7 @@ namespace sw ...@@ -1491,6 +1493,7 @@ namespace sw
break; break;
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
// TODO: avoid populating the low bits at all. // TODO: avoid populating the low bits at all.
c.x = Unpack(As<Byte4>(c0)); c.x = Unpack(As<Byte4>(c0));
c.x &= Short4(0xFF00u); c.x &= Short4(0xFF00u);
......
...@@ -1911,6 +1911,7 @@ bool Format::has16bitTextureFormat() const ...@@ -1911,6 +1911,7 @@ bool Format::has16bitTextureFormat() const
case VK_FORMAT_R32G32B32A32_SFLOAT: case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R16_UNORM: case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R16_SNORM: case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16G16_UNORM: case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM: case VK_FORMAT_R16G16_SNORM:
...@@ -1951,6 +1952,7 @@ bool Format::has8bitTextureComponents() const ...@@ -1951,6 +1952,7 @@ bool Format::has8bitTextureComponents() const
case VK_FORMAT_R8G8B8A8_SRGB: case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB: case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_SNORM: case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8B8A8_SNORM: case VK_FORMAT_R8G8B8A8_SNORM:
...@@ -2035,6 +2037,7 @@ bool Format::has16bitTextureComponents() const ...@@ -2035,6 +2037,7 @@ bool Format::has16bitTextureComponents() const
case VK_FORMAT_R32G32_SFLOAT: case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32A32_SFLOAT: case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
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:
case VK_FORMAT_A2B10G10R10_UNORM_PACK32: case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
...@@ -2106,6 +2109,7 @@ bool Format::has32bitIntegerTextureComponents() const ...@@ -2106,6 +2109,7 @@ bool Format::has32bitIntegerTextureComponents() const
case VK_FORMAT_R32G32_SFLOAT: case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32A32_SFLOAT: case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
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:
case VK_FORMAT_A2B10G10R10_UNORM_PACK32: case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
...@@ -2134,6 +2138,7 @@ bool Format::isRGBComponent(int component) const ...@@ -2134,6 +2138,7 @@ bool Format::isRGBComponent(int component) const
{ {
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8_SINT: case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_UINT: case VK_FORMAT_R8_UINT:
case VK_FORMAT_R16_UNORM: case VK_FORMAT_R16_UNORM:
......
...@@ -388,6 +388,7 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor ...@@ -388,6 +388,7 @@ void PhysicalDevice::getFormatProperties(Format format, VkFormatProperties* pFor
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_A1R5G5B5_UNORM_PACK16: case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_R8_UNORM: case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_UNORM: case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM: case VK_FORMAT_R8G8_SNORM:
......
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