Implement support for RGBA sampling.
Also improve the filtering precision of 3-byte formats.
Change-Id: If314c870735488dfcd22b9ab60b4783e31a4c05b
Reviewed-on: https://swiftshader-review.googlesource.com/2751
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp
index 6022647..75ceceb 100644
--- a/src/Shader/SamplerCore.cpp
+++ b/src/Shader/SamplerCore.cpp
@@ -134,7 +134,9 @@
{
case FORMAT_R8:
case FORMAT_X8R8G8B8:
+ case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
+ case FORMAT_A8B8G8R8:
case FORMAT_V8U8:
case FORMAT_Q8W8V8U8:
case FORMAT_X8L8V8U8:
@@ -288,7 +290,9 @@
{
case FORMAT_R8:
case FORMAT_X8R8G8B8:
+ case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
+ case FORMAT_A8B8G8R8:
case FORMAT_V8U8:
case FORMAT_Q8W8V8U8:
case FORMAT_X8L8V8U8:
@@ -1509,6 +1513,7 @@
c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
c.w = UnpackHigh(As<Byte8>(c.w), As<Byte8>(c.w));
break;
+ case FORMAT_A8B8G8R8:
case FORMAT_Q8W8V8U8:
c.z = c.x;
c.x = As<Short4>(UnpackLow(c.x, c.y));
@@ -1545,15 +1550,14 @@
c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
break;
+ case FORMAT_X8B8G8R8:
case FORMAT_X8L8V8U8:
c.z = c.x;
c.x = As<Short4>(UnpackLow(c.x, c.y));
c.z = As<Short4>(UnpackHigh(c.z, c.y));
c.y = c.x;
- c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(Short4(0x0000, 0x0000, 0x0000, 0x0000)));
- c.x = c.x << 8;
- c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(Short4(0x0000, 0x0000, 0x0000, 0x0000)));
- c.y = c.y << 8;
+ c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
+ c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
break;
default:
@@ -1811,7 +1815,9 @@
{
case FORMAT_G8R8:
case FORMAT_X8R8G8B8:
+ case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
+ case FORMAT_A8B8G8R8:
case FORMAT_V8U8:
case FORMAT_Q8W8V8U8:
case FORMAT_X8L8V8U8:
@@ -1846,7 +1852,9 @@
{
case FORMAT_G8R8: return component < 2;
case FORMAT_X8R8G8B8: return component < 3;
+ case FORMAT_X8B8G8R8: return component < 3;
case FORMAT_A8R8G8B8: return component < 3;
+ case FORMAT_A8B8G8R8: return component < 3;
case FORMAT_V8U8: return false;
case FORMAT_Q8W8V8U8: return false;
case FORMAT_X8L8V8U8: return false;