Shader cleanup
A couple of class members from PixelShader and VertexShader
were still public. Fixed that in this cleanup.
Change-Id: I2dfaac7fd4cecdc791f1ef7236148e74c4b5b486
Reviewed-on: https://swiftshader-review.googlesource.com/5850
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Shader/PixelProgram.cpp b/src/Shader/PixelProgram.cpp
index 5c04196..1f50547 100644
--- a/src/Shader/PixelProgram.cpp
+++ b/src/Shader/PixelProgram.cpp
@@ -28,7 +28,7 @@
{
if(shader->getVersion() >= 0x0300)
{
- if(shader->vPosDeclared)
+ if(shader->isVPosDeclared())
{
if(!halfIntegerCoordinates)
{
@@ -48,7 +48,7 @@
}
}
- if(shader->vFaceDeclared)
+ if(shader->isVFaceDeclared())
{
Float4 area = *Pointer<Float>(primitive + OFFSET(Primitive, area));
Float4 face = booleanFaceRegister ? Float4(As<Float4>(CmpNLT(area, Float4(0.0f)))) : area;
diff --git a/src/Shader/PixelShader.cpp b/src/Shader/PixelShader.cpp
index 806b6e8..0b78c14 100644
--- a/src/Shader/PixelShader.cpp
+++ b/src/Shader/PixelShader.cpp
@@ -34,7 +34,7 @@
append(new sw::Shader::Instruction(*ps->getInstruction(i)));
}
- memcpy(semantic, ps->semantic, sizeof(semantic));
+ memcpy(input, ps->input, sizeof(input));
vPosDeclared = ps->vPosDeclared;
vFaceDeclared = ps->vFaceDeclared;
usedSamplers = ps->usedSamplers;
@@ -125,17 +125,30 @@
bool PixelShader::usesDiffuse(int component) const
{
- return semantic[0][component].active();
+ return input[0][component].active();
}
bool PixelShader::usesSpecular(int component) const
{
- return semantic[1][component].active();
+ return input[1][component].active();
}
bool PixelShader::usesTexture(int coordinate, int component) const
{
- return semantic[2 + coordinate][component].active();
+ return input[2 + coordinate][component].active();
+ }
+
+ void PixelShader::setInput(int inputIdx, int nbComponents, const sw::Shader::Semantic& semantic)
+ {
+ for(int i = 0; i < nbComponents; ++i)
+ {
+ input[inputIdx][i] = semantic;
+ }
+ }
+
+ const sw::Shader::Semantic& PixelShader::getInput(int inputIdx, int component) const
+ {
+ return input[inputIdx][component];
}
void PixelShader::analyze()
@@ -188,22 +201,22 @@
if(version < 0x0300)
{
// Set default mapping; disable unused interpolants below
- semantic[0][0] = Semantic(Shader::USAGE_COLOR, 0);
- semantic[0][1] = Semantic(Shader::USAGE_COLOR, 0);
- semantic[0][2] = Semantic(Shader::USAGE_COLOR, 0);
- semantic[0][3] = Semantic(Shader::USAGE_COLOR, 0);
+ input[0][0] = Semantic(Shader::USAGE_COLOR, 0);
+ input[0][1] = Semantic(Shader::USAGE_COLOR, 0);
+ input[0][2] = Semantic(Shader::USAGE_COLOR, 0);
+ input[0][3] = Semantic(Shader::USAGE_COLOR, 0);
- semantic[1][0] = Semantic(Shader::USAGE_COLOR, 1);
- semantic[1][1] = Semantic(Shader::USAGE_COLOR, 1);
- semantic[1][2] = Semantic(Shader::USAGE_COLOR, 1);
- semantic[1][3] = Semantic(Shader::USAGE_COLOR, 1);
+ input[1][0] = Semantic(Shader::USAGE_COLOR, 1);
+ input[1][1] = Semantic(Shader::USAGE_COLOR, 1);
+ input[1][2] = Semantic(Shader::USAGE_COLOR, 1);
+ input[1][3] = Semantic(Shader::USAGE_COLOR, 1);
for(int i = 0; i < 8; i++)
{
- semantic[2 + i][0] = Semantic(Shader::USAGE_TEXCOORD, i);
- semantic[2 + i][1] = Semantic(Shader::USAGE_TEXCOORD, i);
- semantic[2 + i][2] = Semantic(Shader::USAGE_TEXCOORD, i);
- semantic[2 + i][3] = Semantic(Shader::USAGE_TEXCOORD, i);
+ input[2 + i][0] = Semantic(Shader::USAGE_TEXCOORD, i);
+ input[2 + i][1] = Semantic(Shader::USAGE_TEXCOORD, i);
+ input[2 + i][2] = Semantic(Shader::USAGE_TEXCOORD, i);
+ input[2 + i][3] = Semantic(Shader::USAGE_TEXCOORD, i);
}
Shader::SamplerType samplerType[16];
@@ -660,7 +673,7 @@
{
if(!interpolant[index][component])
{
- semantic[index][component] = Semantic();
+ input[index][component] = Semantic();
}
}
}
@@ -678,10 +691,10 @@
unsigned char mask = instruction[i]->dst.mask;
unsigned char reg = instruction[i]->dst.index;
- if(mask & 0x01) semantic[reg][0] = Semantic(usage, index);
- if(mask & 0x02) semantic[reg][1] = Semantic(usage, index);
- if(mask & 0x04) semantic[reg][2] = Semantic(usage, index);
- if(mask & 0x08) semantic[reg][3] = Semantic(usage, index);
+ if(mask & 0x01) input[reg][0] = Semantic(usage, index);
+ if(mask & 0x02) input[reg][1] = Semantic(usage, index);
+ if(mask & 0x04) input[reg][2] = Semantic(usage, index);
+ if(mask & 0x08) input[reg][3] = Semantic(usage, index);
}
else if(instruction[i]->dst.type == Shader::PARAMETER_MISCTYPE)
{
@@ -713,10 +726,10 @@
switch(instruction[i]->dst.type)
{
case Shader::PARAMETER_INPUT:
- semantic[reg][0].centroid = centroid;
+ input[reg][0].centroid = centroid;
break;
case Shader::PARAMETER_TEXTURE:
- semantic[2 + reg][0].centroid = centroid;
+ input[2 + reg][0].centroid = centroid;
break;
default:
break;
diff --git a/src/Shader/PixelShader.hpp b/src/Shader/PixelShader.hpp
index 2fbde6b..a06aaaa 100644
--- a/src/Shader/PixelShader.hpp
+++ b/src/Shader/PixelShader.hpp
@@ -36,18 +36,24 @@
bool usesSpecular(int component) const;
bool usesTexture(int coordinate, int component) const;
- virtual void analyze();
+ void setInput(int inputIdx, int nbComponents, const Semantic& semantic);
+ const Semantic& getInput(int inputIdx, int component) const;
- Semantic semantic[MAX_FRAGMENT_INPUTS][4]; // FIXME: Private
-
- bool vPosDeclared;
- bool vFaceDeclared;
+ void declareVPos() { vPosDeclared = true; }
+ void declareVFace() { vFaceDeclared = true; }
+ bool isVPosDeclared() const { return vPosDeclared; }
+ bool isVFaceDeclared() const { return vFaceDeclared; }
private:
+ void analyze();
void analyzeZOverride();
void analyzeKill();
void analyzeInterpolants();
+ Semantic input[MAX_FRAGMENT_INPUTS][4];
+
+ bool vPosDeclared;
+ bool vFaceDeclared;
bool zOverride;
bool kill;
bool centroid;
diff --git a/src/Shader/Shader.hpp b/src/Shader/Shader.hpp
index 3cd08a3..ae8b90f 100644
--- a/src/Shader/Shader.hpp
+++ b/src/Shader/Shader.hpp
@@ -593,7 +593,6 @@
};
void optimize();
- virtual void analyze() = 0;
// FIXME: Private
unsigned int dirtyConstantsF;
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index 5fda7e7..20caa49 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -50,7 +50,7 @@
enableContinue = Int4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
}
- if(shader->instanceIdDeclared)
+ if(shader->isInstanceIdDeclared())
{
instanceID = *Pointer<Int>(data + OFFSET(DrawData,instanceID));
}
@@ -596,7 +596,7 @@
{
for(int i = 0; i < MAX_VERTEX_OUTPUTS; i++)
{
- unsigned char usage = shader->output[i][0].usage;
+ unsigned char usage = shader->getOutput(i, 0).usage;
switch(usage)
{
diff --git a/src/Shader/VertexShader.cpp b/src/Shader/VertexShader.cpp
index 733c113..dd62b4b 100644
--- a/src/Shader/VertexShader.cpp
+++ b/src/Shader/VertexShader.cpp
@@ -27,6 +27,7 @@
positionRegister = Pos;
pointSizeRegister = Unused;
instanceIdDeclared = false;
+ textureSampling = false;
for(int i = 0; i < MAX_VERTEX_INPUTS; i++)
{
@@ -59,6 +60,7 @@
positionRegister = Pos;
pointSizeRegister = Unused;
instanceIdDeclared = false;
+ textureSampling = false;
for(int i = 0; i < MAX_VERTEX_INPUTS; i++)
{
@@ -149,6 +151,41 @@
return textureSampling;
}
+ void VertexShader::setInput(int inputIdx, const sw::Shader::Semantic& semantic)
+ {
+ input[inputIdx] = semantic;
+ }
+
+ void VertexShader::setOutput(int outputIdx, int nbComponents, const sw::Shader::Semantic& semantic)
+ {
+ for(int i = 0; i < nbComponents; ++i)
+ {
+ output[outputIdx][i] = semantic;
+ }
+ }
+
+ void VertexShader::setPositionRegister(int posReg)
+ {
+ setOutput(posReg, 4, sw::Shader::Semantic(sw::Shader::USAGE_POSITION, 0));
+ positionRegister = posReg;
+ }
+
+ void VertexShader::setPointSizeRegister(int ptSizeReg)
+ {
+ setOutput(ptSizeReg, 4, sw::Shader::Semantic(sw::Shader::USAGE_PSIZE, 0));
+ pointSizeRegister = ptSizeReg;
+ }
+
+ const sw::Shader::Semantic& VertexShader::getInput(int inputIdx) const
+ {
+ return input[inputIdx];
+ }
+
+ const sw::Shader::Semantic& VertexShader::getOutput(int outputIdx, int component) const
+ {
+ return output[outputIdx][component];
+ }
+
void VertexShader::analyze()
{
analyzeInput();
diff --git a/src/Shader/VertexShader.hpp b/src/Shader/VertexShader.hpp
index 0fdd09c..4eb6786 100644
--- a/src/Shader/VertexShader.hpp
+++ b/src/Shader/VertexShader.hpp
@@ -31,21 +31,31 @@
static int validate(const unsigned long *const token); // Returns number of instructions if valid
bool containsTextureSampling() const;
- virtual void analyze();
+ void setInput(int inputIdx, const Semantic& semantic);
+ void setOutput(int outputIdx, int nbComponents, const Semantic& semantic);
+ void setPositionRegister(int posReg);
+ void setPointSizeRegister(int ptSizeReg);
+ void declareInstanceId() { instanceIdDeclared = true; }
- int positionRegister; // FIXME: Private
- int pointSizeRegister; // FIXME: Private
-
- bool instanceIdDeclared;
-
- Semantic input[MAX_VERTEX_INPUTS]; // FIXME: Private
- Semantic output[MAX_VERTEX_OUTPUTS][4]; // FIXME: Private
+ const Semantic& getInput(int inputIdx) const;
+ const Semantic& getOutput(int outputIdx, int component) const;
+ int getPositionRegister() const { return positionRegister; }
+ int getPointSizeRegister() const { return pointSizeRegister; }
+ bool isInstanceIdDeclared() const { return instanceIdDeclared; }
private:
+ void analyze();
void analyzeInput();
void analyzeOutput();
void analyzeTextureSampling();
+ Semantic input[MAX_VERTEX_INPUTS];
+ Semantic output[MAX_VERTEX_OUTPUTS][4];
+
+ int positionRegister;
+ int pointSizeRegister;
+
+ bool instanceIdDeclared;
bool textureSampling;
};
}