EAC fix
Fixed 2 issues:
- Added missing VK_FORMAT_R16* formats in SamplerCore
- Made sure the minimum signed EAC value also gets bit shifted
Bug b/119620767
Change-Id: I3189001316cc0c65d3be9a9bd2e986df4f7a3690
Tests: dEQP-VK.*eac*
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30908
Tested-by: Alexis Hétu <sugoi@google.com>
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Device/ETC_Decoder.cpp b/src/Device/ETC_Decoder.cpp
index a9f4e4c..c40f7da 100644
--- a/src/Device/ETC_Decoder.cpp
+++ b/src/Device/ETC_Decoder.cpp
@@ -30,7 +30,7 @@
{
short min = isSigned ? -1023 : 0;
short max = isSigned ? 1023 : 2047;
- return (value < min) ? min : ((value > max) ? max : value) << 5;
+ return ((value < min) ? min : ((value > max) ? max : value)) << 5;
}
struct bgra8
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index bca6f37..d63b401 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -212,8 +212,6 @@
}
}
- int componentCount = textureComponentCount();
-
if(state.textureFilter != FILTER_GATHER)
{
switch(state.textureFormat)
@@ -241,33 +239,32 @@
case VK_FORMAT_R32G32B32A32_UINT:
break;
case VK_FORMAT_R8_SNORM:
- case VK_FORMAT_R8G8_SNORM:
- case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8_UNORM:
- case VK_FORMAT_R5G6B5_UNORM_PACK16:
- case VK_FORMAT_R8G8_UNORM:
- case VK_FORMAT_R16G16_UNORM:
- case VK_FORMAT_R16G16B16A16_UNORM:
- case VK_FORMAT_B8G8R8A8_UNORM:
- case VK_FORMAT_B8G8R8A8_SRGB:
- case VK_FORMAT_R8G8B8A8_UNORM:
- case VK_FORMAT_R8G8B8A8_SRGB:
- case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
- case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
- case VK_FORMAT_B10G11R11_UFLOAT_PACK32:
- if(componentCount < 2) c.y = Float4(0.0f);
- if(componentCount < 3) c.z = Float4(0.0f);
- if(componentCount < 4) c.w = Float4(1.0f);
- break;
+ case VK_FORMAT_R16_SNORM:
+ case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_D16_UNORM:
c.y = Float4(0.0f);
+ case VK_FORMAT_R8G8_SNORM:
+ case VK_FORMAT_R8G8_UNORM:
+ case VK_FORMAT_R16G16_SNORM:
+ case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R16G16_SFLOAT:
c.z = Float4(0.0f);
+ case VK_FORMAT_R5G6B5_UNORM_PACK16:
+ case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
+ case VK_FORMAT_B10G11R11_UFLOAT_PACK32:
+ case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
c.w = Float4(1.0f);
+ case VK_FORMAT_R8G8B8A8_SNORM:
+ case VK_FORMAT_R16G16B16A16_UNORM:
+ case VK_FORMAT_B8G8R8A8_UNORM:
+ case VK_FORMAT_B8G8R8A8_SRGB:
+ case VK_FORMAT_R8G8B8A8_UNORM:
+ case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_A2B10G10R10_UNORM_PACK32: