Fix support for variable number of render targets.
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>
diff --git a/src/Main/Config.hpp b/src/Main/Config.hpp
index 7d0952c..2ceec37 100644
--- a/src/Main/Config.hpp
+++ b/src/Main/Config.hpp
@@ -91,7 +91,7 @@
MAX_CLIP_PLANES = 6,
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64,
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64,
- RENDERTARGETS = 4,
+ RENDERTARGETS = 8,
};
}
diff --git a/src/OpenGL/libGLESv2/Device.cpp b/src/OpenGL/libGLESv2/Device.cpp
index db7ad75..7da952b 100644
--- a/src/OpenGL/libGLESv2/Device.cpp
+++ b/src/OpenGL/libGLESv2/Device.cpp
@@ -72,7 +72,6 @@
setPointSize(1.0f);
setPointSizeMin(0.125f);
setPointSizeMax(8192.0f);
- setColorWriteMask(0, 0x0000000F);
setBlendOperation(BLENDOP_ADD);
scissorEnable = false;
setSlopeDepthBias(0.0f);
@@ -81,9 +80,6 @@
setStencilZFailOperationCCW(OPERATION_KEEP);
setStencilPassOperationCCW(OPERATION_KEEP);
setStencilCompareCCW(STENCIL_ALWAYS);
- setColorWriteMask(1, 0x0000000F);
- setColorWriteMask(2, 0x0000000F);
- setColorWriteMask(3, 0x0000000F);
setBlendConstant(0xFFFFFFFF);
setWriteSRGB(false);
setDepthBias(0.0f);
diff --git a/src/Renderer/Context.cpp b/src/Renderer/Context.cpp
index 64b6ce5..b1891b2 100644
--- a/src/Renderer/Context.cpp
+++ b/src/Renderer/Context.cpp
@@ -272,10 +272,11 @@
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;
diff --git a/src/Renderer/Context.hpp b/src/Renderer/Context.hpp
index 91a1998..c8f9624 100644
--- a/src/Renderer/Context.hpp
+++ b/src/Renderer/Context.hpp
@@ -518,7 +518,7 @@
bool pointScaleEnable;
float lineWidth;
- int colorWriteMask[4]; // RGBA
+ int colorWriteMask[RENDERTARGETS]; // RGBA
bool writeSRGB;
unsigned int sampleMask;
unsigned int multiSampleMask;
diff --git a/src/Renderer/PixelProcessor.cpp b/src/Renderer/PixelProcessor.cpp
index 02d4c56..636351a 100644
--- a/src/Renderer/PixelProcessor.cpp
+++ b/src/Renderer/PixelProcessor.cpp
@@ -959,13 +959,9 @@
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);
}
diff --git a/src/Renderer/PixelProcessor.hpp b/src/Renderer/PixelProcessor.hpp
index 571e860..104f377 100644
--- a/src/Renderer/PixelProcessor.hpp
+++ b/src/Renderer/PixelProcessor.hpp
@@ -71,8 +71,8 @@
BlendFactor sourceBlendFactorAlpha : BITS(BLEND_LAST);
BlendFactor destBlendFactorAlpha : BITS(BLEND_LAST);
BlendOperation blendOperationAlpha : BITS(BLENDOP_LAST);
-
- unsigned int colorWriteMask : 16; // (four times four component bit mask)
+
+ unsigned int colorWriteMask : RENDERTARGETS * 4; // Four component bit masks
Format targetFormat[RENDERTARGETS];
bool writeSRGB : 1;
unsigned int multiSample : 3;