OSDN Git Service

Remove some GL/D3D legacy format quirks from vulkan vertex buffers
authorChris Forbes <chrisforbes@google.com>
Wed, 27 Feb 2019 21:48:24 +0000 (13:48 -0800)
committerChris Forbes <chrisforbes@google.com>
Mon, 4 Mar 2019 20:40:40 +0000 (20:40 +0000)
- Fix mapping of B8G8R8A8 -- this is the same as the old D3DCOLOR.
- Remove all the other stream types that don't match anything in Vulkan.
- Remove unused resource pointer in stream

There is still future cleanup work to do here -- we should be able to
do vertex fetch purely based on the VkFormat rather than mapping it onto
the GL model.

Change-Id: Ia100ec68e8930acd17b6cba35a27403b4ef8e883
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/25768
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
src/Device/Stream.hpp
src/Pipeline/VertexRoutine.cpp
src/Vulkan/VkPipeline.cpp

index 31a80ab..54841e3 100644 (file)
 
 namespace sw
 {
-       class Resource;
-
        enum StreamType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
        {
                STREAMTYPE_COLOR,     // 4 normalized unsigned bytes, ZYXW order
-               STREAMTYPE_UDEC3,     // 3 unsigned 10-bit fields
-               STREAMTYPE_DEC3N,     // 3 normalized signed 10-bit fields
-               STREAMTYPE_INDICES,   // 4 unsigned bytes, stored unconverted into X component
                STREAMTYPE_FLOAT,     // Normalization ignored
                STREAMTYPE_BYTE,
                STREAMTYPE_SBYTE,
@@ -34,7 +29,6 @@ namespace sw
                STREAMTYPE_USHORT,
                STREAMTYPE_INT,
                STREAMTYPE_UINT,
-               STREAMTYPE_FIXED,     // Normalization ignored (16.16 format)
                STREAMTYPE_HALF,      // Normalization ignored
                STREAMTYPE_2_10_10_10_INT,
                STREAMTYPE_2_10_10_10_UINT,
@@ -44,16 +38,14 @@ namespace sw
 
        struct StreamResource
        {
-               Resource *resource;
                const void *buffer;
                unsigned int stride;
        };
 
        struct Stream : public StreamResource
        {
-               Stream(Resource *resource = 0, const void *buffer = 0, unsigned int stride = 0)
+               Stream(const void *buffer = nullptr, unsigned int stride = 0)
                {
-                       this->resource = resource;
                        this->buffer = buffer;
                        this->stride = stride;
                }
@@ -81,7 +73,6 @@ namespace sw
                {
                        static const float4 null = {0, 0, 0, 1};
 
-                       resource = 0;
                        buffer = &null;
                        stride = 0;
                        type = STREAMTYPE_FLOAT;
index 803c24d..c4e5db5 100644 (file)
@@ -376,115 +376,6 @@ namespace sw
                                transpose4xN(v.x, v.y, v.z, v.w, stream.count);
                        }
                        break;
-               case STREAMTYPE_UDEC3:
-                       {
-                               // FIXME: Vectorize
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source0);
-
-                                       v.x.x = Float(x & 0x000003FF);
-                                       v.x.y = Float(y & 0x000FFC00);
-                                       v.x.z = Float(z & 0x3FF00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source1);
-
-                                       v.y.x = Float(x & 0x000003FF);
-                                       v.y.y = Float(y & 0x000FFC00);
-                                       v.y.z = Float(z & 0x3FF00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source2);
-
-                                       v.z.x = Float(x & 0x000003FF);
-                                       v.z.y = Float(y & 0x000FFC00);
-                                       v.z.z = Float(z & 0x3FF00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source3);
-
-                                       v.w.x = Float(x & 0x000003FF);
-                                       v.w.y = Float(y & 0x000FFC00);
-                                       v.w.z = Float(z & 0x3FF00000);
-                               }
-
-                               transpose4x3(v.x, v.y, v.z, v.w);
-
-                               v.y *= Float4(1.0f / 0x00000400);
-                               v.z *= Float4(1.0f / 0x00100000);
-                       }
-                       break;
-               case STREAMTYPE_DEC3N:
-                       {
-                               // FIXME: Vectorize
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source0);
-
-                                       v.x.x = Float((x << 22) & 0xFFC00000);
-                                       v.x.y = Float((y << 12) & 0xFFC00000);
-                                       v.x.z = Float((z << 2)  & 0xFFC00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source1);
-
-                                       v.y.x = Float((x << 22) & 0xFFC00000);
-                                       v.y.y = Float((y << 12) & 0xFFC00000);
-                                       v.y.z = Float((z << 2)  & 0xFFC00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source2);
-
-                                       v.z.x = Float((x << 22) & 0xFFC00000);
-                                       v.z.y = Float((y << 12) & 0xFFC00000);
-                                       v.z.z = Float((z << 2)  & 0xFFC00000);
-                               }
-
-                               {
-                                       Int x, y, z;
-
-                                       x = y = z = *Pointer<Int>(source3);
-
-                                       v.w.x = Float((x << 22) & 0xFFC00000);
-                                       v.w.y = Float((y << 12) & 0xFFC00000);
-                                       v.w.z = Float((z << 2)  & 0xFFC00000);
-                               }
-
-                               transpose4x3(v.x, v.y, v.z, v.w);
-
-                               v.x *= Float4(1.0f / 0x00400000 / 511.0f);
-                               v.y *= Float4(1.0f / 0x00400000 / 511.0f);
-                               v.z *= Float4(1.0f / 0x00400000 / 511.0f);
-                       }
-                       break;
-               case STREAMTYPE_FIXED:
-                       {
-                               v.x = Float4(*Pointer<Int4>(source0)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
-                               v.y = Float4(*Pointer<Int4>(source1)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
-                               v.z = Float4(*Pointer<Int4>(source2)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
-                               v.w = Float4(*Pointer<Int4>(source3)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
-
-                               transpose4xN(v.x, v.y, v.z, v.w, stream.count);
-                       }
-                       break;
                case STREAMTYPE_HALF:
                        {
                                if(stream.count >= 1)
@@ -540,14 +431,6 @@ namespace sw
                                }
                        }
                        break;
-               case STREAMTYPE_INDICES:
-                       {
-                               v.x.x = *Pointer<Float>(source0);
-                               v.x.y = *Pointer<Float>(source1);
-                               v.x.z = *Pointer<Float>(source2);
-                               v.x.w = *Pointer<Float>(source3);
-                       }
-                       break;
                case STREAMTYPE_2_10_10_10_INT:
                        {
                                Int4 src;
index 556b6a2..b2eac40 100644 (file)
@@ -70,10 +70,11 @@ sw::StreamType getStreamType(VkFormat format)
        case VK_FORMAT_R8_UINT:
        case VK_FORMAT_R8G8_UINT:
        case VK_FORMAT_R8G8B8A8_UINT:
-       case VK_FORMAT_B8G8R8A8_UNORM:
        case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
        case VK_FORMAT_A8B8G8R8_UINT_PACK32:
                return sw::STREAMTYPE_BYTE;
+       case VK_FORMAT_B8G8R8A8_UNORM:
+               return sw::STREAMTYPE_COLOR;
        case VK_FORMAT_R8_SNORM:
        case VK_FORMAT_R8_SINT:
        case VK_FORMAT_R8G8_SNORM: