OSDN Git Service

Fix support for variable number of render targets.
authorNicolas Capens <capn@google.com>
Mon, 18 Apr 2016 16:07:22 +0000 (12:07 -0400)
committerNicolas Capens <capn@google.com>
Mon, 18 Apr 2016 21:47:39 +0000 (21:47 +0000)
Bug 19353282

Change-Id: I4e99589477de32bb8004feec673e1dbddb675047
Reviewed-on: https://swiftshader-review.googlesource.com/5144
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/Main/Config.hpp
src/OpenGL/libGLESv2/Device.cpp
src/Renderer/Context.cpp
src/Renderer/Context.hpp
src/Renderer/PixelProcessor.cpp
src/Renderer/PixelProcessor.hpp

index 7d0952c..2ceec37 100644 (file)
@@ -91,7 +91,7 @@ namespace sw
                MAX_CLIP_PLANES = 6,\r
                MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64,\r
                MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64,\r
-               RENDERTARGETS = 4,\r
+               RENDERTARGETS = 8,\r
        };\r
 }\r
 \r
index db7ad75..7da952b 100644 (file)
@@ -72,7 +72,6 @@ namespace es2
                setPointSize(1.0f);\r
                setPointSizeMin(0.125f);\r
         setPointSizeMax(8192.0f);\r
-               setColorWriteMask(0, 0x0000000F);\r
                setBlendOperation(BLENDOP_ADD);\r
                scissorEnable = false;\r
                setSlopeDepthBias(0.0f);\r
@@ -81,9 +80,6 @@ namespace es2
                setStencilZFailOperationCCW(OPERATION_KEEP);\r
                setStencilPassOperationCCW(OPERATION_KEEP);\r
                setStencilCompareCCW(STENCIL_ALWAYS);\r
-               setColorWriteMask(1, 0x0000000F);\r
-               setColorWriteMask(2, 0x0000000F);\r
-               setColorWriteMask(3, 0x0000000F);\r
                setBlendConstant(0xFFFFFFFF);\r
                setWriteSRGB(false);\r
                setDepthBias(0.0f);\r
index 64b6ce5..b1891b2 100644 (file)
@@ -272,10 +272,11 @@ namespace sw
 
                cullMode = CULL_CLOCKWISE;
                alphaReference = 0.0f;
-               colorWriteMask[0] = 0x0000000F;
-               colorWriteMask[1] = 0x0000000F;
-               colorWriteMask[2] = 0x0000000F;
-               colorWriteMask[3] = 0x0000000F;
+
+               for(int i = 0; i < RENDERTARGETS; i++)
+               {
+                       colorWriteMask[i] = 0x0000000F;
+               }
 
                ambientMaterialSource = MATERIAL_MATERIAL;
                diffuseMaterialSource = MATERIAL_COLOR1;
index 91a1998..c8f9624 100644 (file)
@@ -518,7 +518,7 @@ namespace sw
                bool pointScaleEnable;\r
                float lineWidth;\r
 \r
-               int colorWriteMask[4];   // RGBA\r
+               int colorWriteMask[RENDERTARGETS];   // RGBA\r
                bool writeSRGB;\r
                unsigned int sampleMask;\r
                unsigned int multiSampleMask;\r
index 02d4c56..636351a 100644 (file)
@@ -959,13 +959,9 @@ namespace sw
 
                state.logicalOperation = context->colorLogicOp();
 
-               state.colorWriteMask = (context->colorWriteActive(0) << 0) |
-                                      (context->colorWriteActive(1) << 4) |
-                                      (context->colorWriteActive(2) << 8) |
-                                      (context->colorWriteActive(3) << 12);
-
                for(int i = 0; i < RENDERTARGETS; i++)
                {
+                       state.colorWriteMask |= context->colorWriteActive(i) << (4 * i);
                        state.targetFormat[i] = context->renderTargetInternalFormat(i);
                }
 
index 571e860..104f377 100644 (file)
@@ -71,8 +71,8 @@ namespace sw
                        BlendFactor sourceBlendFactorAlpha        : BITS(BLEND_LAST);\r
                        BlendFactor destBlendFactorAlpha          : BITS(BLEND_LAST);\r
                        BlendOperation blendOperationAlpha        : BITS(BLENDOP_LAST);\r
-                       \r
-                       unsigned int colorWriteMask                       : 16;   // (four times four component bit mask)\r
+\r
+                       unsigned int colorWriteMask                       : RENDERTARGETS * 4;   // Four component bit masks\r
                        Format targetFormat[RENDERTARGETS];\r
                        bool writeSRGB                                    : 1;\r
                        unsigned int multiSample                          : 3;\r