OSDN Git Service

Implement support for RGBA sampling.
authorNicolas Capens <capn@google.com>
Sat, 28 Mar 2015 22:44:48 +0000 (18:44 -0400)
committerNicolas Capens <capn@google.com>
Tue, 31 Mar 2015 17:35:32 +0000 (17:35 +0000)
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>
src/Shader/SamplerCore.cpp

index 6022647..75ceceb 100644 (file)
@@ -134,7 +134,9 @@ namespace sw
                                {
                                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 @@ namespace sw
                                {
                                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 @@ namespace sw
                                                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 @@ namespace sw
                                                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 @@ namespace sw
                {
                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 @@ namespace sw
                {
                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;