Commit addcdccb by Chris Forbes

Add support for sampling VK_FORMAT_A1R5G5B5_UNORM_PACK16

Bug: b/131246807 Test: dEQP-VK.*a1r5g5b5* Change-Id: Iea73786b10dca6f4116a0093218e182a089c5bcf Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30468Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent b0a68ed5
...@@ -151,6 +151,12 @@ namespace sw ...@@ -151,6 +151,12 @@ namespace sw
c.z *= Float4(1.0f / 0xF000); c.z *= Float4(1.0f / 0xF000);
c.w *= Float4(1.0f / 0xF000); c.w *= Float4(1.0f / 0xF000);
break; break;
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
c.x *= Float4(1.0f / 0xF800);
c.y *= Float4(1.0f / 0xF800);
c.z *= Float4(1.0f / 0xF800);
c.w *= Float4(1.0f / 0x8000);
break;
default: default:
ASSERT(false); ASSERT(false);
} }
...@@ -181,6 +187,13 @@ namespace sw ...@@ -181,6 +187,13 @@ namespace sw
c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xF000); c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xF000);
c.w = Float4(As<UShort4>(cs.w)) * Float4(1.0f / 0xF000); c.w = Float4(As<UShort4>(cs.w)) * Float4(1.0f / 0xF000);
} }
else if (state.textureFormat == VK_FORMAT_A1R5G5B5_UNORM_PACK16)
{
c.x = Float4(As<UShort4>(cs.x)) * Float4(1.0f / 0xF800);
c.y = Float4(As<UShort4>(cs.y)) * Float4(1.0f / 0xF800);
c.z = Float4(As<UShort4>(cs.z)) * Float4(1.0f / 0xF800);
c.w = Float4(As<UShort4>(cs.w)) * Float4(1.0f / 0x8000);
}
else else
{ {
for(int component = 0; component < textureComponentCount(); component++) for(int component = 0; component < textureComponentCount(); component++)
...@@ -253,6 +266,7 @@ namespace sw ...@@ -253,6 +266,7 @@ namespace sw
case VK_FORMAT_A2B10G10R10_UNORM_PACK32: case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
case VK_FORMAT_A2B10G10R10_UINT_PACK32: case VK_FORMAT_A2B10G10R10_UINT_PACK32:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
break; break;
default: default:
ASSERT(false); ASSERT(false);
...@@ -1504,6 +1518,12 @@ namespace sw ...@@ -1504,6 +1518,12 @@ namespace sw
c.y = (c.x << 4) & Short4(0xF000); c.y = (c.x << 4) & Short4(0xF000);
c.x = (c.x << 8) & Short4(0xF000); c.x = (c.x << 8) & Short4(0xF000);
break; break;
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
c.w = (c.x) & Short4(0x8000);
c.z = (c.x << 11) & Short4(0xF800);
c.y = (c.x << 6) & Short4(0xF800);
c.x = (c.x << 1) & Short4(0xF800);
break;
default: default:
ASSERT(false); ASSERT(false);
} }
......
...@@ -1700,6 +1700,7 @@ bool Format::has16bitTextureFormat() const ...@@ -1700,6 +1700,7 @@ bool Format::has16bitTextureFormat() const
{ {
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
return true; return true;
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_SNORM: case VK_FORMAT_R8G8_SNORM:
...@@ -1765,6 +1766,7 @@ bool Format::has8bitTextureComponents() const ...@@ -1765,6 +1766,7 @@ bool Format::has8bitTextureComponents() const
case VK_FORMAT_R8G8B8A8_SINT: case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_UINT: case VK_FORMAT_R8G8B8A8_UINT:
return true; return true;
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_R32_SFLOAT: case VK_FORMAT_R32_SFLOAT:
...@@ -1802,6 +1804,7 @@ bool Format::has16bitTextureComponents() const ...@@ -1802,6 +1804,7 @@ bool Format::has16bitTextureComponents() const
{ {
switch(format) switch(format)
{ {
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
...@@ -1854,6 +1857,7 @@ bool Format::has32bitIntegerTextureComponents() const ...@@ -1854,6 +1857,7 @@ bool Format::has32bitIntegerTextureComponents() const
{ {
switch(format) switch(format)
{ {
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
...@@ -1908,6 +1912,7 @@ bool Format::hasYuvFormat() const ...@@ -1908,6 +1912,7 @@ bool Format::hasYuvFormat() const
{ {
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return true; return true;
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_R8_SNORM: case VK_FORMAT_R8_SNORM:
...@@ -1981,6 +1986,7 @@ bool Format::isRGBComponent(int component) const ...@@ -1981,6 +1986,7 @@ bool Format::isRGBComponent(int component) const
case VK_FORMAT_R32G32_UINT: case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SFLOAT: case VK_FORMAT_R32G32_SFLOAT:
return component < 2; return component < 2;
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16: case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16: case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_R8G8B8A8_SNORM: case VK_FORMAT_R8G8B8A8_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