Commit 68754bf1 by Nicolas Capens

Make the GLSL compiler independent of the API shader class.

Bug 18962347 Change-Id: I1a45c5572a45a16ae04ab77e7029ab31905ac702 Reviewed-on: https://swiftshader-review.googlesource.com/1750Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent cbeb51f4
...@@ -99,7 +99,17 @@ namespace sh ...@@ -99,7 +99,17 @@ namespace sh
this->registerIndex = registerIndex; this->registerIndex = registerIndex;
} }
OutputASM::OutputASM(TParseContext &context, es2::Shader *shaderObject) : TIntermTraverser(true, true, true), mContext(context), shaderObject(shaderObject) sw::PixelShader *Shader::getPixelShader() const
{
return 0;
}
sw::VertexShader *Shader::getVertexShader() const
{
return 0;
}
OutputASM::OutputASM(TParseContext &context, Shader *shaderObject) : TIntermTraverser(true, true, true), mContext(context), shaderObject(shaderObject)
{ {
shader = 0; shader = 0;
pixelShader = 0; pixelShader = 0;
...@@ -2047,10 +2057,10 @@ namespace sh ...@@ -2047,10 +2057,10 @@ namespace sh
{ {
const TType &type = varying->getType(); const TType &type = varying->getType();
const char *name = varying->getAsSymbolNode()->getSymbol().c_str(); const char *name = varying->getAsSymbolNode()->getSymbol().c_str();
es2::VaryingList &activeVaryings = shaderObject->varyings; VaryingList &activeVaryings = shaderObject->varyings;
// Check if this varying has been declared before without having a register assigned // Check if this varying has been declared before without having a register assigned
for(es2::VaryingList::iterator v = activeVaryings.begin(); v != activeVaryings.end(); v++) for(VaryingList::iterator v = activeVaryings.begin(); v != activeVaryings.end(); v++)
{ {
if(v->name == name) if(v->name == name)
{ {
...@@ -2064,7 +2074,7 @@ namespace sh ...@@ -2064,7 +2074,7 @@ namespace sh
} }
} }
activeVaryings.push_back(es2::Varying(glVariableType(type), name, varying->getArraySize(), reg, 0)); activeVaryings.push_back(sh::Varying(glVariableType(type), name, varying->getArraySize(), reg, 0));
} }
} }
......
...@@ -57,6 +57,49 @@ namespace sh ...@@ -57,6 +57,49 @@ namespace sh
int registerIndex; int registerIndex;
}; };
typedef std::vector<Attribute> ActiveAttributes;
struct Varying
{
Varying(GLenum type, const std::string &name, int arraySize, int reg = -1, int col = -1)
: type(type), name(name), arraySize(arraySize), reg(reg), col(col)
{
}
bool isArray() const
{
return arraySize >= 1;
}
int size() const // Unify with es2::Uniform?
{
return arraySize > 0 ? arraySize : 1;
}
GLenum type;
std::string name;
int arraySize;
int reg; // First varying register, assigned during link
int col; // First register element, assigned during link
};
typedef std::list<Varying> VaryingList;
class Shader
{
friend class OutputASM;
public:
virtual sw::Shader *getShader() const = 0;
virtual sw::PixelShader *getPixelShader() const;
virtual sw::VertexShader *getVertexShader() const;
protected:
VaryingList varyings;
ActiveUniforms activeUniforms;
ActiveAttributes activeAttributes;
};
struct Function struct Function
{ {
Function(int label, const char *name, TIntermSequence *arg, TIntermTyped *ret) : label(label), name(name), arg(arg), ret(ret) Function(int label, const char *name, TIntermSequence *arg, TIntermTyped *ret) : label(label), name(name), arg(arg), ret(ret)
...@@ -74,14 +117,13 @@ namespace sh ...@@ -74,14 +117,13 @@ namespace sh
}; };
typedef sw::Shader::Instruction Instruction; typedef sw::Shader::Instruction Instruction;
typedef std::vector<Attribute> ActiveAttributes;
class Temporary; class Temporary;
class OutputASM : public TIntermTraverser class OutputASM : public TIntermTraverser
{ {
public: public:
explicit OutputASM(TParseContext &context, es2::Shader *shaderObject); explicit OutputASM(TParseContext &context, Shader *shaderObject);
~OutputASM(); ~OutputASM();
void output(); void output();
...@@ -145,7 +187,7 @@ namespace sh ...@@ -145,7 +187,7 @@ namespace sh
static unsigned int loopCount(TIntermLoop *node); static unsigned int loopCount(TIntermLoop *node);
static bool isSamplerRegister(TIntermTyped *operand); static bool isSamplerRegister(TIntermTyped *operand);
es2::Shader *const shaderObject; Shader *const shaderObject;
sw::Shader *shader; sw::Shader *shader;
sw::PixelShader *pixelShader; sw::PixelShader *pixelShader;
sw::VertexShader *vertexShader; sw::VertexShader *vertexShader;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "InitializeParseContext.h" #include "InitializeParseContext.h"
TranslatorASM::TranslatorASM(es2::Shader *shaderObject, ShShaderType type, ShShaderSpec spec) : TCompiler(type, spec), shaderObject(shaderObject) TranslatorASM::TranslatorASM(sh::Shader *shaderObject, ShShaderType type, ShShaderSpec spec) : TCompiler(type, spec), shaderObject(shaderObject)
{ {
} }
......
...@@ -14,10 +14,8 @@ ...@@ -14,10 +14,8 @@
#include "ShHandle.h" #include "ShHandle.h"
#include "OutputASM.h" #include "OutputASM.h"
#include "Shader/PixelShader.hpp"
#include "Shader/VertexShader.hpp"
namespace es2 namespace sh
{ {
class Shader; class Shader;
} }
...@@ -25,13 +23,13 @@ namespace es2 ...@@ -25,13 +23,13 @@ namespace es2
class TranslatorASM : public TCompiler class TranslatorASM : public TCompiler
{ {
public: public:
TranslatorASM(es2::Shader *shaderObject, ShShaderType type, ShShaderSpec spec); TranslatorASM(sh::Shader *shaderObject, ShShaderType type, ShShaderSpec spec);
protected: protected:
virtual bool translate(TIntermNode* root); virtual bool translate(TIntermNode* root);
private: private:
es2::Shader *const shaderObject; sh::Shader *const shaderObject;
}; };
#endif // COMPILER_TRANSLATORASM_H_ #endif // COMPILER_TRANSLATORASM_H_
...@@ -940,9 +940,9 @@ namespace es2 ...@@ -940,9 +940,9 @@ namespace es2
// Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111 // Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111
// Returns the number of used varying registers, or -1 if unsuccesful // Returns the number of used varying registers, or -1 if unsuccesful
int Program::packVaryings(const Varying *packing[][4]) int Program::packVaryings(const sh::Varying *packing[][4])
{ {
for(VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++) for(sh::VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++)
{ {
int n = VariableRowCount(varying->type) * varying->size(); int n = VariableRowCount(varying->type) * varying->size();
int m = VariableColumnCount(varying->type); int m = VariableColumnCount(varying->type);
...@@ -1087,11 +1087,11 @@ namespace es2 ...@@ -1087,11 +1087,11 @@ namespace es2
bool Program::linkVaryings() bool Program::linkVaryings()
{ {
for(VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++) for(sh::VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++)
{ {
bool matched = false; bool matched = false;
for(VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++) for(sh::VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
...@@ -1115,12 +1115,12 @@ namespace es2 ...@@ -1115,12 +1115,12 @@ namespace es2
} }
} }
VaryingList &psVaryings = fragmentShader->varyings; sh::VaryingList &psVaryings = fragmentShader->varyings;
VaryingList &vsVaryings = vertexShader->varyings; sh::VaryingList &vsVaryings = vertexShader->varyings;
for(VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++) for(sh::VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++)
{ {
for(VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++) for(sh::VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
......
...@@ -133,7 +133,7 @@ namespace es2 ...@@ -133,7 +133,7 @@ namespace es2
private: private:
void unlink(); void unlink();
int packVaryings(const Varying *packing[][4]); int packVaryings(const sh::Varying *packing[][4]);
bool linkVaryings(); bool linkVaryings();
bool linkAttributes(); bool linkAttributes();
......
...@@ -197,16 +197,6 @@ bool Shader::isCompiled() ...@@ -197,16 +197,6 @@ bool Shader::isCompiled()
return getShader() != 0; return getShader() != 0;
} }
sw::PixelShader *Shader::getPixelShader() const
{
return 0;
}
sw::VertexShader *Shader::getVertexShader() const
{
return 0;
}
void Shader::addRef() void Shader::addRef()
{ {
mRefCount++; mRefCount++;
...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type) ...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type)
} }
// true if varying x has a higher priority in packing than y // true if varying x has a higher priority in packing than y
bool Shader::compareVarying(const Varying &x, const Varying &y) bool Shader::compareVarying(const sh::Varying &x, const sh::Varying &y)
{ {
if(x.type == y.type) if(x.type == y.type)
{ {
......
...@@ -34,37 +34,10 @@ namespace sh ...@@ -34,37 +34,10 @@ namespace sh
namespace es2 namespace es2
{ {
struct Varying
{
Varying(GLenum type, const std::string &name, int arraySize, int reg = -1, int col = -1)
: type(type), name(name), arraySize(arraySize), reg(reg), col(col)
{
}
bool isArray() const
{
return arraySize >= 1;
}
int size() const // Unify with es2::Uniform?
{
return arraySize > 0 ? arraySize : 1;
}
GLenum type;
std::string name;
int arraySize;
int reg; // First varying register, assigned during link
int col; // First register element, assigned during link
};
typedef std::list<Varying> VaryingList; class Shader : public sh::Shader
class Shader
{ {
friend class Program; friend class Program;
friend class sh::OutputASM;
public: public:
Shader(ResourceManager *manager, GLuint handle); Shader(ResourceManager *manager, GLuint handle);
...@@ -84,10 +57,6 @@ public: ...@@ -84,10 +57,6 @@ public:
virtual void compile() = 0; virtual void compile() = 0;
bool isCompiled(); bool isCompiled();
virtual sw::Shader *getShader() const = 0;
virtual sw::PixelShader *getPixelShader() const;
virtual sw::VertexShader *getVertexShader() const;
void addRef(); void addRef();
void release(); void release();
unsigned int getRefCount() const; unsigned int getRefCount() const;
...@@ -102,15 +71,11 @@ protected: ...@@ -102,15 +71,11 @@ protected:
void clear(); void clear();
static GLenum parseType(const std::string &type); static GLenum parseType(const std::string &type);
static bool compareVarying(const Varying &x, const Varying &y); static bool compareVarying(const sh::Varying &x, const sh::Varying &y);
char *mSource; char *mSource;
char *mInfoLog; char *mInfoLog;
VaryingList varyings;
sh::ActiveUniforms activeUniforms;
sh::ActiveAttributes activeAttributes;
private: private:
const GLuint mHandle; const GLuint mHandle;
unsigned int mRefCount; // Number of program objects this shader is attached to unsigned int mRefCount; // Number of program objects this shader is attached to
......
...@@ -940,9 +940,9 @@ namespace es2 ...@@ -940,9 +940,9 @@ namespace es2
// Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111 // Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111
// Returns the number of used varying registers, or -1 if unsuccesful // Returns the number of used varying registers, or -1 if unsuccesful
int Program::packVaryings(const Varying *packing[][4]) int Program::packVaryings(const sh::Varying *packing[][4])
{ {
for(VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++) for(sh::VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++)
{ {
int n = VariableRowCount(varying->type) * varying->size(); int n = VariableRowCount(varying->type) * varying->size();
int m = VariableColumnCount(varying->type); int m = VariableColumnCount(varying->type);
...@@ -1087,11 +1087,11 @@ namespace es2 ...@@ -1087,11 +1087,11 @@ namespace es2
bool Program::linkVaryings() bool Program::linkVaryings()
{ {
for(VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++) for(sh::VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++)
{ {
bool matched = false; bool matched = false;
for(VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++) for(sh::VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
...@@ -1115,12 +1115,12 @@ namespace es2 ...@@ -1115,12 +1115,12 @@ namespace es2
} }
} }
VaryingList &psVaryings = fragmentShader->varyings; sh::VaryingList &psVaryings = fragmentShader->varyings;
VaryingList &vsVaryings = vertexShader->varyings; sh::VaryingList &vsVaryings = vertexShader->varyings;
for(VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++) for(sh::VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++)
{ {
for(VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++) for(sh::VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
......
...@@ -133,7 +133,7 @@ namespace es2 ...@@ -133,7 +133,7 @@ namespace es2
private: private:
void unlink(); void unlink();
int packVaryings(const Varying *packing[][4]); int packVaryings(const sh::Varying *packing[][4]);
bool linkVaryings(); bool linkVaryings();
bool linkAttributes(); bool linkAttributes();
......
...@@ -197,16 +197,6 @@ bool Shader::isCompiled() ...@@ -197,16 +197,6 @@ bool Shader::isCompiled()
return getShader() != 0; return getShader() != 0;
} }
sw::PixelShader *Shader::getPixelShader() const
{
return 0;
}
sw::VertexShader *Shader::getVertexShader() const
{
return 0;
}
void Shader::addRef() void Shader::addRef()
{ {
mRefCount++; mRefCount++;
...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type) ...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type)
} }
// true if varying x has a higher priority in packing than y // true if varying x has a higher priority in packing than y
bool Shader::compareVarying(const Varying &x, const Varying &y) bool Shader::compareVarying(const sh::Varying &x, const sh::Varying &y)
{ {
if(x.type == y.type) if(x.type == y.type)
{ {
......
...@@ -34,37 +34,10 @@ namespace sh ...@@ -34,37 +34,10 @@ namespace sh
namespace es2 namespace es2
{ {
struct Varying
{
Varying(GLenum type, const std::string &name, int arraySize, int reg = -1, int col = -1)
: type(type), name(name), arraySize(arraySize), reg(reg), col(col)
{
}
bool isArray() const
{
return arraySize >= 1;
}
int size() const // Unify with es2::Uniform?
{
return arraySize > 0 ? arraySize : 1;
}
GLenum type;
std::string name;
int arraySize;
int reg; // First varying register, assigned during link
int col; // First register element, assigned during link
};
typedef std::list<Varying> VaryingList; class Shader : public sh::Shader
class Shader
{ {
friend class Program; friend class Program;
friend class sh::OutputASM;
public: public:
Shader(ResourceManager *manager, GLuint handle); Shader(ResourceManager *manager, GLuint handle);
...@@ -84,10 +57,6 @@ public: ...@@ -84,10 +57,6 @@ public:
virtual void compile() = 0; virtual void compile() = 0;
bool isCompiled(); bool isCompiled();
virtual sw::Shader *getShader() const = 0;
virtual sw::PixelShader *getPixelShader() const;
virtual sw::VertexShader *getVertexShader() const;
void addRef(); void addRef();
void release(); void release();
unsigned int getRefCount() const; unsigned int getRefCount() const;
...@@ -102,15 +71,11 @@ protected: ...@@ -102,15 +71,11 @@ protected:
void clear(); void clear();
static GLenum parseType(const std::string &type); static GLenum parseType(const std::string &type);
static bool compareVarying(const Varying &x, const Varying &y); static bool compareVarying(const sh::Varying &x, const sh::Varying &y);
char *mSource; char *mSource;
char *mInfoLog; char *mInfoLog;
VaryingList varyings;
sh::ActiveUniforms activeUniforms;
sh::ActiveAttributes activeAttributes;
private: private:
const GLuint mHandle; const GLuint mHandle;
unsigned int mRefCount; // Number of program objects this shader is attached to unsigned int mRefCount; // Number of program objects this shader is attached to
......
...@@ -940,9 +940,9 @@ namespace es2 ...@@ -940,9 +940,9 @@ namespace es2
// Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111 // Packs varyings into generic varying registers, using the algorithm from [OpenGL ES Shading Language 1.00 rev. 17] appendix A section 7 page 111
// Returns the number of used varying registers, or -1 if unsuccesful // Returns the number of used varying registers, or -1 if unsuccesful
int Program::packVaryings(const Varying *packing[][4]) int Program::packVaryings(const sh::Varying *packing[][4])
{ {
for(VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++) for(sh::VaryingList::iterator varying = fragmentShader->varyings.begin(); varying != fragmentShader->varyings.end(); varying++)
{ {
int n = VariableRowCount(varying->type) * varying->size(); int n = VariableRowCount(varying->type) * varying->size();
int m = VariableColumnCount(varying->type); int m = VariableColumnCount(varying->type);
...@@ -1087,11 +1087,11 @@ namespace es2 ...@@ -1087,11 +1087,11 @@ namespace es2
bool Program::linkVaryings() bool Program::linkVaryings()
{ {
for(VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++) for(sh::VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); input++)
{ {
bool matched = false; bool matched = false;
for(VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++) for(sh::VaryingList::iterator output = vertexShader->varyings.begin(); output != vertexShader->varyings.end(); output++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
...@@ -1115,12 +1115,12 @@ namespace es2 ...@@ -1115,12 +1115,12 @@ namespace es2
} }
} }
VaryingList &psVaryings = fragmentShader->varyings; sh::VaryingList &psVaryings = fragmentShader->varyings;
VaryingList &vsVaryings = vertexShader->varyings; sh::VaryingList &vsVaryings = vertexShader->varyings;
for(VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++) for(sh::VaryingList::iterator output = vsVaryings.begin(); output != vsVaryings.end(); output++)
{ {
for(VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++) for(sh::VaryingList::iterator input = psVaryings.begin(); input != psVaryings.end(); input++)
{ {
if(output->name == input->name) if(output->name == input->name)
{ {
......
...@@ -142,7 +142,7 @@ namespace es2 ...@@ -142,7 +142,7 @@ namespace es2
private: private:
void unlink(); void unlink();
int packVaryings(const Varying *packing[][4]); int packVaryings(const sh::Varying *packing[][4]);
bool linkVaryings(); bool linkVaryings();
bool linkAttributes(); bool linkAttributes();
......
...@@ -197,16 +197,6 @@ bool Shader::isCompiled() ...@@ -197,16 +197,6 @@ bool Shader::isCompiled()
return getShader() != 0; return getShader() != 0;
} }
sw::PixelShader *Shader::getPixelShader() const
{
return 0;
}
sw::VertexShader *Shader::getVertexShader() const
{
return 0;
}
void Shader::addRef() void Shader::addRef()
{ {
mRefCount++; mRefCount++;
...@@ -216,9 +206,9 @@ void Shader::release() ...@@ -216,9 +206,9 @@ void Shader::release()
{ {
mRefCount--; mRefCount--;
if(mRefCount == 0) if(mRefCount == 0)
{ {
delete this; delete this;
} }
} }
...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type) ...@@ -279,7 +269,7 @@ GLenum Shader::parseType(const std::string &type)
} }
// true if varying x has a higher priority in packing than y // true if varying x has a higher priority in packing than y
bool Shader::compareVarying(const Varying &x, const Varying &y) bool Shader::compareVarying(const sh::Varying &x, const sh::Varying &y)
{ {
if(x.type == y.type) if(x.type == y.type)
{ {
......
...@@ -32,37 +32,10 @@ namespace sh ...@@ -32,37 +32,10 @@ namespace sh
namespace es2 namespace es2
{ {
struct Varying
{
Varying(GLenum type, const std::string &name, int arraySize, int reg = -1, int col = -1)
: type(type), name(name), arraySize(arraySize), reg(reg), col(col)
{
}
bool isArray() const
{
return arraySize >= 1;
}
int size() const // Unify with es2::Uniform?
{
return arraySize > 0 ? arraySize : 1;
}
GLenum type;
std::string name;
int arraySize;
int reg; // First varying register, assigned during link
int col; // First register element, assigned during link
};
typedef std::list<Varying> VaryingList; class Shader : public sh::Shader
class Shader
{ {
friend class Program; friend class Program;
friend class sh::OutputASM;
public: public:
Shader(GLuint handle); Shader(GLuint handle);
...@@ -82,10 +55,6 @@ public: ...@@ -82,10 +55,6 @@ public:
virtual void compile() = 0; virtual void compile() = 0;
bool isCompiled(); bool isCompiled();
virtual sw::Shader *getShader() const = 0;
virtual sw::PixelShader *getPixelShader() const;
virtual sw::VertexShader *getVertexShader() const;
void addRef(); void addRef();
void release(); void release();
unsigned int getRefCount() const; unsigned int getRefCount() const;
...@@ -100,15 +69,11 @@ protected: ...@@ -100,15 +69,11 @@ protected:
void clear(); void clear();
static GLenum parseType(const std::string &type); static GLenum parseType(const std::string &type);
static bool compareVarying(const Varying &x, const Varying &y); static bool compareVarying(const sh::Varying &x, const sh::Varying &y);
char *mSource; char *mSource;
char *mInfoLog; char *mInfoLog;
VaryingList varyings;
sh::ActiveUniforms activeUniforms;
sh::ActiveAttributes activeAttributes;
private: private:
const GLuint mHandle; const GLuint mHandle;
unsigned int mRefCount; // Number of program objects this shader is attached to unsigned int mRefCount; // Number of program objects this shader is attached to
......
...@@ -47,7 +47,7 @@ namespace sw ...@@ -47,7 +47,7 @@ namespace sw
Pointer<Byte> vertexCache = cache + OFFSET(VertexCache,vertex); Pointer<Byte> vertexCache = cache + OFFSET(VertexCache,vertex);
Pointer<Byte> tagCache = cache + OFFSET(VertexCache,tag); Pointer<Byte> tagCache = cache + OFFSET(VertexCache,tag);
UInt count = *Pointer<UInt>(task+ OFFSET(VertexTask,count)); UInt count = *Pointer<UInt>(task + OFFSET(VertexTask,count));
Registers r(shader); Registers r(shader);
r.data = data; r.data = data;
......
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