Make the GLSL compiler independent of the API shader class.

Bug 18962347

Change-Id: I1a45c5572a45a16ae04ab77e7029ab31905ac702
Reviewed-on: https://swiftshader-review.googlesource.com/1750
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index 7a8462d..ba70fc0 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -99,7 +99,17 @@
 		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;

 		pixelShader = 0;

@@ -2047,10 +2057,10 @@
 		{

 			const TType &type = varying->getType();

 			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

-			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)

 				{

@@ -2064,7 +2074,7 @@
 				}

 			}

 			

-			activeVaryings.push_back(es2::Varying(glVariableType(type), name, varying->getArraySize(), reg, 0));

+			activeVaryings.push_back(sh::Varying(glVariableType(type), name, varying->getArraySize(), reg, 0));

 		}

 	}

 

diff --git a/src/OpenGL/compiler/OutputASM.h b/src/OpenGL/compiler/OutputASM.h
index 0252421..54af409 100644
--- a/src/OpenGL/compiler/OutputASM.h
+++ b/src/OpenGL/compiler/OutputASM.h
@@ -57,6 +57,49 @@
 		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

 	{

 		Function(int label, const char *name, TIntermSequence *arg, TIntermTyped *ret) : label(label), name(name), arg(arg), ret(ret)

@@ -74,14 +117,13 @@
 	};

 	

 	typedef sw::Shader::Instruction Instruction;

-	typedef std::vector<Attribute> ActiveAttributes;

 

 	class Temporary;

 

 	class OutputASM : public TIntermTraverser

 	{

 	public:

-		explicit OutputASM(TParseContext &context, es2::Shader *shaderObject);

+		explicit OutputASM(TParseContext &context, Shader *shaderObject);

 		~OutputASM();

 

 		void output();

@@ -145,7 +187,7 @@
 		static unsigned int loopCount(TIntermLoop *node);

 		static bool isSamplerRegister(TIntermTyped *operand);

 

-		es2::Shader *const shaderObject;

+		Shader *const shaderObject;

 		sw::Shader *shader;

 		sw::PixelShader *pixelShader;

 		sw::VertexShader *vertexShader;

diff --git a/src/OpenGL/compiler/TranslatorASM.cpp b/src/OpenGL/compiler/TranslatorASM.cpp
index 8749900..0cf13d4 100644
--- a/src/OpenGL/compiler/TranslatorASM.cpp
+++ b/src/OpenGL/compiler/TranslatorASM.cpp
@@ -13,7 +13,7 @@
 

 #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)

 {

 }

 

diff --git a/src/OpenGL/compiler/TranslatorASM.h b/src/OpenGL/compiler/TranslatorASM.h
index 596c424..32739ec 100644
--- a/src/OpenGL/compiler/TranslatorASM.h
+++ b/src/OpenGL/compiler/TranslatorASM.h
@@ -14,10 +14,8 @@
 

 #include "ShHandle.h"

 #include "OutputASM.h"

-#include "Shader/PixelShader.hpp"

-#include "Shader/VertexShader.hpp"

 

-namespace es2

+namespace sh

 {

 	class Shader;

 }

@@ -25,13 +23,13 @@
 class TranslatorASM : public TCompiler

 {

 public:

-    TranslatorASM(es2::Shader *shaderObject, ShShaderType type, ShShaderSpec spec);

+    TranslatorASM(sh::Shader *shaderObject, ShShaderType type, ShShaderSpec spec);

 

 protected:

     virtual bool translate(TIntermNode* root);

 

 private:

-	es2::Shader *const shaderObject;

+	sh::Shader *const shaderObject;

 };

 

 #endif  // COMPILER_TRANSLATORASM_H_

diff --git a/src/OpenGL/libGL/Program.cpp b/src/OpenGL/libGL/Program.cpp
index 03042fa..71573d5 100644
--- a/src/OpenGL/libGL/Program.cpp
+++ b/src/OpenGL/libGL/Program.cpp
@@ -940,9 +940,9 @@
 

 	// 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

-	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 m = VariableColumnCount(varying->type);

@@ -1087,11 +1087,11 @@
 

 	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;

 

-			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)

 				{

@@ -1115,12 +1115,12 @@
 			}

 		}

 

-		VaryingList &psVaryings = fragmentShader->varyings;

-		VaryingList &vsVaryings = vertexShader->varyings;

+		sh::VaryingList &psVaryings = fragmentShader->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)

 				{

diff --git a/src/OpenGL/libGL/Program.h b/src/OpenGL/libGL/Program.h
index eae96bd..4afb55b 100644
--- a/src/OpenGL/libGL/Program.h
+++ b/src/OpenGL/libGL/Program.h
@@ -133,7 +133,7 @@
 	private:

 		void unlink();

 

-		int packVaryings(const Varying *packing[][4]);

+		int packVaryings(const sh::Varying *packing[][4]);

 		bool linkVaryings();

 

 		bool linkAttributes();

diff --git a/src/OpenGL/libGL/Shader.cpp b/src/OpenGL/libGL/Shader.cpp
index 335427a..fd09672 100644
--- a/src/OpenGL/libGL/Shader.cpp
+++ b/src/OpenGL/libGL/Shader.cpp
@@ -197,16 +197,6 @@
     return getShader() != 0;
 }
 
-sw::PixelShader *Shader::getPixelShader() const
-{
-	return 0;
-}
-
-sw::VertexShader *Shader::getVertexShader() const
-{
-	return 0;
-}
-
 void Shader::addRef()
 {
     mRefCount++;
@@ -279,7 +269,7 @@
 }
 
 // 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)
     {
diff --git a/src/OpenGL/libGL/Shader.h b/src/OpenGL/libGL/Shader.h
index 871450c..05535e3 100644
--- a/src/OpenGL/libGL/Shader.h
+++ b/src/OpenGL/libGL/Shader.h
@@ -34,37 +34,10 @@
 

 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

+class Shader : public sh::Shader

 {

     friend class Program;

-	friend class sh::OutputASM;

 

 public:

     Shader(ResourceManager *manager, GLuint handle);

@@ -84,10 +57,6 @@
     virtual void compile() = 0;

     bool isCompiled();

     

-	virtual sw::Shader *getShader() const = 0;

-	virtual sw::PixelShader *getPixelShader() const;

-	virtual sw::VertexShader *getVertexShader() const;

-

     void addRef();

     void release();

     unsigned int getRefCount() const;

@@ -102,15 +71,11 @@
 	void clear();

 

     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 *mInfoLog;

 

-    VaryingList varyings;

-	sh::ActiveUniforms activeUniforms;

-	sh::ActiveAttributes activeAttributes;

-

 private:

 	const GLuint mHandle;

     unsigned int mRefCount;     // Number of program objects this shader is attached to

diff --git a/src/OpenGL/libGLESv2/Program.cpp b/src/OpenGL/libGLESv2/Program.cpp
index 03042fa..71573d5 100644
--- a/src/OpenGL/libGLESv2/Program.cpp
+++ b/src/OpenGL/libGLESv2/Program.cpp
@@ -940,9 +940,9 @@
 

 	// 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

-	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 m = VariableColumnCount(varying->type);

@@ -1087,11 +1087,11 @@
 

 	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;

 

-			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)

 				{

@@ -1115,12 +1115,12 @@
 			}

 		}

 

-		VaryingList &psVaryings = fragmentShader->varyings;

-		VaryingList &vsVaryings = vertexShader->varyings;

+		sh::VaryingList &psVaryings = fragmentShader->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)

 				{

diff --git a/src/OpenGL/libGLESv2/Program.h b/src/OpenGL/libGLESv2/Program.h
index dd87fb2..8fedcce 100644
--- a/src/OpenGL/libGLESv2/Program.h
+++ b/src/OpenGL/libGLESv2/Program.h
@@ -133,7 +133,7 @@
 	private:

 		void unlink();

 

-		int packVaryings(const Varying *packing[][4]);

+		int packVaryings(const sh::Varying *packing[][4]);

 		bool linkVaryings();

 

 		bool linkAttributes();

diff --git a/src/OpenGL/libGLESv2/Shader.cpp b/src/OpenGL/libGLESv2/Shader.cpp
index 335427a..fd09672 100644
--- a/src/OpenGL/libGLESv2/Shader.cpp
+++ b/src/OpenGL/libGLESv2/Shader.cpp
@@ -197,16 +197,6 @@
     return getShader() != 0;
 }
 
-sw::PixelShader *Shader::getPixelShader() const
-{
-	return 0;
-}
-
-sw::VertexShader *Shader::getVertexShader() const
-{
-	return 0;
-}
-
 void Shader::addRef()
 {
     mRefCount++;
@@ -279,7 +269,7 @@
 }
 
 // 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)
     {
diff --git a/src/OpenGL/libGLESv2/Shader.h b/src/OpenGL/libGLESv2/Shader.h
index 009d0dd..ce0ce9a 100644
--- a/src/OpenGL/libGLESv2/Shader.h
+++ b/src/OpenGL/libGLESv2/Shader.h
@@ -34,37 +34,10 @@
 

 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

+class Shader : public sh::Shader

 {

     friend class Program;

-	friend class sh::OutputASM;

 

 public:

     Shader(ResourceManager *manager, GLuint handle);

@@ -84,10 +57,6 @@
     virtual void compile() = 0;

     bool isCompiled();

     

-	virtual sw::Shader *getShader() const = 0;

-	virtual sw::PixelShader *getPixelShader() const;

-	virtual sw::VertexShader *getVertexShader() const;

-

     void addRef();

     void release();

     unsigned int getRefCount() const;

@@ -102,15 +71,11 @@
 	void clear();

 

     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 *mInfoLog;

 

-    VaryingList varyings;

-	sh::ActiveUniforms activeUniforms;

-	sh::ActiveAttributes activeAttributes;

-

 private:

 	const GLuint mHandle;

     unsigned int mRefCount;     // Number of program objects this shader is attached to

diff --git a/src/Radiance/libRAD/Program.cpp b/src/Radiance/libRAD/Program.cpp
index 5639f97..18e8af1 100644
--- a/src/Radiance/libRAD/Program.cpp
+++ b/src/Radiance/libRAD/Program.cpp
@@ -940,9 +940,9 @@
 

 	// 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

-	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 m = VariableColumnCount(varying->type);

@@ -1087,11 +1087,11 @@
 

 	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;

 

-			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)

 				{

@@ -1115,12 +1115,12 @@
 			}

 		}

 

-		VaryingList &psVaryings = fragmentShader->varyings;

-		VaryingList &vsVaryings = vertexShader->varyings;

+		sh::VaryingList &psVaryings = fragmentShader->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)

 				{

diff --git a/src/Radiance/libRAD/Program.h b/src/Radiance/libRAD/Program.h
index cac95ba..e07f275 100644
--- a/src/Radiance/libRAD/Program.h
+++ b/src/Radiance/libRAD/Program.h
@@ -142,7 +142,7 @@
 	private:

 		void unlink();

 

-		int packVaryings(const Varying *packing[][4]);

+		int packVaryings(const sh::Varying *packing[][4]);

 		bool linkVaryings();

 

 		bool linkAttributes();

diff --git a/src/Radiance/libRAD/Shader.cpp b/src/Radiance/libRAD/Shader.cpp
index 13e3ab3..50ae334 100644
--- a/src/Radiance/libRAD/Shader.cpp
+++ b/src/Radiance/libRAD/Shader.cpp
@@ -197,16 +197,6 @@
     return getShader() != 0;
 }
 
-sw::PixelShader *Shader::getPixelShader() const
-{
-	return 0;
-}
-
-sw::VertexShader *Shader::getVertexShader() const
-{
-	return 0;
-}
-
 void Shader::addRef()
 {
     mRefCount++;
@@ -216,9 +206,9 @@
 {
     mRefCount--;
 
-	if(mRefCount == 0)

-	{

-		delete this;

+	if(mRefCount == 0)
+	{
+		delete this;
 	}
 }
 
@@ -279,7 +269,7 @@
 }
 
 // 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)
     {
diff --git a/src/Radiance/libRAD/Shader.h b/src/Radiance/libRAD/Shader.h
index 2824384..9f910ce 100644
--- a/src/Radiance/libRAD/Shader.h
+++ b/src/Radiance/libRAD/Shader.h
@@ -32,37 +32,10 @@
 

 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

+class Shader : public sh::Shader

 {

     friend class Program;

-	friend class sh::OutputASM;

 

 public:

     Shader(GLuint handle);

@@ -82,10 +55,6 @@
     virtual void compile() = 0;

     bool isCompiled();

     

-	virtual sw::Shader *getShader() const = 0;

-	virtual sw::PixelShader *getPixelShader() const;

-	virtual sw::VertexShader *getVertexShader() const;

-

     void addRef();

     void release();

     unsigned int getRefCount() const;

@@ -100,15 +69,11 @@
 	void clear();

 

     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 *mInfoLog;

 

-    VaryingList varyings;

-	sh::ActiveUniforms activeUniforms;

-	sh::ActiveAttributes activeAttributes;

-

 private:

 	const GLuint mHandle;

     unsigned int mRefCount;     // Number of program objects this shader is attached to

diff --git a/src/Shader/VertexRoutine.cpp b/src/Shader/VertexRoutine.cpp
index 0e21eee..2b590f4 100644
--- a/src/Shader/VertexRoutine.cpp
+++ b/src/Shader/VertexRoutine.cpp
@@ -47,7 +47,7 @@
 			Pointer<Byte> vertexCache = cache + OFFSET(VertexCache,vertex);
 			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);
 			r.data = data;