Commit 3b4c93fe by Nicolas Capens

Make the number of fragment inputs configurable.

Change-Id: I2c618c03d00718951907e81fcd600155751aac89 Reviewed-on: https://swiftshader-review.googlesource.com/5385Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent ec0936c4
...@@ -474,17 +474,20 @@ namespace D3D9 ...@@ -474,17 +474,20 @@ namespace D3D9
MAX_VERTEX_SHADER_CONST = 256, MAX_VERTEX_SHADER_CONST = 256,
MAX_PIXEL_SHADER_CONST = 224, MAX_PIXEL_SHADER_CONST = 224,
MAX_VERTEX_OUTPUTS = 12, MAX_VERTEX_OUTPUTS = 12,
MAX_PIXEL_INPUTS = 10,
}; };
// Shader Model 3.0 requirements // Shader Model 3.0 requirements
META_ASSERT(MAX_VERTEX_SHADER_CONST >= 256); META_ASSERT(MAX_VERTEX_SHADER_CONST >= 256);
META_ASSERT(MAX_PIXEL_SHADER_CONST == 224); META_ASSERT(MAX_PIXEL_SHADER_CONST == 224);
META_ASSERT(MAX_VERTEX_OUTPUTS == 12); META_ASSERT(MAX_VERTEX_OUTPUTS == 12);
META_ASSERT(MAX_PIXEL_INPUTS == 10);
// Back-end minimum requirements // Back-end minimum requirements
META_ASSERT(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST); META_ASSERT(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST);
META_ASSERT(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST); META_ASSERT(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST);
META_ASSERT(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS); META_ASSERT(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS);
META_ASSERT(sw::MAX_FRAGMENT_INPUTS >= MAX_PIXEL_INPUTS);
} }
#endif // D3D9_Capabilities_hpp #endif // D3D9_Capabilities_hpp
...@@ -88,6 +88,7 @@ namespace sw ...@@ -88,6 +88,7 @@ namespace sw
FRAGMENT_UNIFORM_VECTORS = 224, FRAGMENT_UNIFORM_VECTORS = 224,
VERTEX_UNIFORM_VECTORS = 256, VERTEX_UNIFORM_VECTORS = 256,
MAX_VERTEX_OUTPUTS = 12, MAX_VERTEX_OUTPUTS = 12,
MAX_FRAGMENT_INPUTS = 10,
MAX_FRAGMENT_UNIFORM_BLOCKS = 12, MAX_FRAGMENT_UNIFORM_BLOCKS = 12,
MAX_VERTEX_UNIFORM_BLOCKS = 12, MAX_VERTEX_UNIFORM_BLOCKS = 12,
MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS, // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS, // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp
......
...@@ -2760,7 +2760,7 @@ namespace glsl ...@@ -2760,7 +2760,7 @@ namespace glsl
if(pixelShader) if(pixelShader)
{ {
if((var + registerCount) > sw::PixelShader::MAX_INPUT_VARYINGS) if((var + registerCount) > sw::MAX_FRAGMENT_INPUTS)
{ {
mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "fragment shader"); mContext.error(varying->getLine(), "Varyings packing failed: Too many varyings", "fragment shader");
return 0; return 0;
......
...@@ -1072,7 +1072,7 @@ namespace sw ...@@ -1072,7 +1072,7 @@ namespace sw
} }
else else
{ {
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
...@@ -1082,8 +1082,8 @@ namespace sw ...@@ -1082,8 +1082,8 @@ namespace sw
switch(context->pixelShader->semantic[interpolant][component].usage) switch(context->pixelShader->semantic[interpolant][component].usage)
{ {
case Shader::USAGE_TEXCOORD: flat = point && !sprite; break; case Shader::USAGE_TEXCOORD: flat = point && !sprite; break;
case Shader::USAGE_COLOR: flat = flatShading; break; case Shader::USAGE_COLOR: flat = flatShading; break;
} }
state.interpolant[interpolant].component |= 1 << component; state.interpolant[interpolant].component |= 1 << component;
...@@ -1099,7 +1099,7 @@ namespace sw ...@@ -1099,7 +1099,7 @@ namespace sw
if(state.centroid) if(state.centroid)
{ {
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
...@@ -102,12 +102,11 @@ namespace sw ...@@ -102,12 +102,11 @@ namespace sw
{ {
Interpolant color[2]; Interpolant color[2];
Interpolant texture[8]; Interpolant texture[8];
Interpolant fog;
}; };
Interpolant interpolant[10]; Interpolant interpolant[MAX_FRAGMENT_INPUTS];
}; };
Interpolant fog;
}; };
struct State : States struct State : States
...@@ -271,7 +270,7 @@ namespace sw ...@@ -271,7 +270,7 @@ namespace sw
virtual void setFillMode(FillMode fillMode); virtual void setFillMode(FillMode fillMode);
virtual void setShadingMode(ShadingMode shadingMode); virtual void setShadingMode(ShadingMode shadingMode);
virtual void setAlphaBlendEnable(bool alphaBlendEnable); virtual void setAlphaBlendEnable(bool alphaBlendEnable);
virtual void setSourceBlendFactor(BlendFactor sourceBlendFactor); virtual void setSourceBlendFactor(BlendFactor sourceBlendFactor);
virtual void setDestBlendFactor(BlendFactor destBlendFactor); virtual void setDestBlendFactor(BlendFactor destBlendFactor);
......
...@@ -51,13 +51,12 @@ namespace sw ...@@ -51,13 +51,12 @@ namespace sw
{ {
PlaneEquation C[2][4]; PlaneEquation C[2][4];
PlaneEquation T[8][4]; PlaneEquation T[8][4];
PlaneEquation f;
}; };
PlaneEquation V[10][4]; PlaneEquation V[MAX_FRAGMENT_INPUTS][4];
}; };
PlaneEquation f;
float area; float area;
// Masks for two-sided stencil // Masks for two-sided stencil
......
...@@ -237,7 +237,7 @@ namespace sw ...@@ -237,7 +237,7 @@ namespace sw
Dw = *Pointer<Float4>(primitive + OFFSET(Primitive,w.C), 16) + yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive,w.B), 16); Dw = *Pointer<Float4>(primitive + OFFSET(Primitive,w.C), 16) + yyyy * *Pointer<Float4>(primitive + OFFSET(Primitive,w.B), 16);
} }
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
...@@ -36,7 +36,7 @@ namespace sw ...@@ -36,7 +36,7 @@ namespace sw
Float4 Dz[4]; Float4 Dz[4];
Float4 Dw; Float4 Dw;
Float4 Dv[10][4]; Float4 Dv[MAX_FRAGMENT_INPUTS][4];
Float4 Df; Float4 Df;
UInt occlusion; UInt occlusion;
......
...@@ -104,7 +104,7 @@ namespace sw ...@@ -104,7 +104,7 @@ namespace sw
state.pointSizeRegister = Pts; state.pointSizeRegister = Pts;
} }
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
...@@ -124,7 +124,7 @@ namespace sw ...@@ -124,7 +124,7 @@ namespace sw
if(context->vertexShader && context->pixelShader) if(context->vertexShader && context->pixelShader)
{ {
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
...@@ -158,7 +158,7 @@ namespace sw ...@@ -158,7 +158,7 @@ namespace sw
} }
else if(context->preTransformed && context->pixelShader) else if(context->preTransformed && context->pixelShader)
{ {
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
...@@ -67,12 +67,11 @@ namespace sw ...@@ -67,12 +67,11 @@ namespace sw
{ {
Gradient color[2][4]; Gradient color[2][4];
Gradient texture[8][4]; Gradient texture[8][4];
Gradient fog;
}; };
Gradient gradient[10][4]; Gradient gradient[MAX_FRAGMENT_INPUTS][4];
}; };
Gradient fog;
}; };
struct State : States struct State : States
......
...@@ -34,7 +34,7 @@ namespace sw ...@@ -34,7 +34,7 @@ namespace sw
{ {
if(!shader || shader->getVersion() < 0x0200 || forceClearRegisters) if(!shader || shader->getVersion() < 0x0200 || forceClearRegisters)
{ {
for(int i = 0; i < 10; i++) for(int i = 0; i < MAX_FRAGMENT_INPUTS; i++)
{ {
v[i].x = Float4(0.0f); v[i].x = Float4(0.0f);
v[i].y = Float4(0.0f); v[i].y = Float4(0.0f);
...@@ -151,7 +151,7 @@ namespace sw ...@@ -151,7 +151,7 @@ namespace sw
} }
} }
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
...@@ -34,7 +34,7 @@ namespace sw ...@@ -34,7 +34,7 @@ namespace sw
Float4 w; // Used as is Float4 w; // Used as is
Float4 rhw; // Reciprocal w Float4 rhw; // Reciprocal w
RegisterArray<10> v; // Varying registers RegisterArray<MAX_FRAGMENT_INPUTS> v; // Varying registers
// Depth output // Depth output
Float4 oDepth; Float4 oDepth;
......
...@@ -223,7 +223,7 @@ namespace sw ...@@ -223,7 +223,7 @@ namespace sw
} }
} }
bool interpolant[MAX_INPUT_VARYINGS][4] = {{false}}; // Interpolants in use bool interpolant[MAX_FRAGMENT_INPUTS][4] = {{false}}; // Interpolants in use
for(unsigned int i = 0; i < instruction.size(); i++) for(unsigned int i = 0; i < instruction.size(); i++)
{ {
...@@ -655,7 +655,7 @@ namespace sw ...@@ -655,7 +655,7 @@ namespace sw
} }
} }
for(int index = 0; index < MAX_INPUT_VARYINGS; index++) for(int index = 0; index < MAX_FRAGMENT_INPUTS; index++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#define sw_PixelShader_hpp #define sw_PixelShader_hpp
#include "Shader.hpp" #include "Shader.hpp"
#include "Main/Config.hpp"
namespace sw namespace sw
{ {
...@@ -37,8 +38,7 @@ namespace sw ...@@ -37,8 +38,7 @@ namespace sw
virtual void analyze(); virtual void analyze();
enum {MAX_INPUT_VARYINGS = 10}; Semantic semantic[MAX_FRAGMENT_INPUTS][4]; // FIXME: Private
Semantic semantic[MAX_INPUT_VARYINGS][4]; // FIXME: Private
bool vPosDeclared; bool vPosDeclared;
bool vFaceDeclared; bool vFaceDeclared;
......
...@@ -455,7 +455,7 @@ namespace sw ...@@ -455,7 +455,7 @@ namespace sw
*Pointer<Float4>(primitive + OFFSET(Primitive,z.C), 16) = C; *Pointer<Float4>(primitive + OFFSET(Primitive,z.C), 16) = C;
} }
for(int interpolant = 0; interpolant < 10; interpolant++) for(int interpolant = 0; interpolant < MAX_FRAGMENT_INPUTS; interpolant++)
{ {
for(int component = 0; component < 4; component++) for(int component = 0; component < 4; component++)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment