summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorNeoBrainX <NeoBrainX@gmail.com>2013-03-29 22:24:49 +0100
committerNeoBrainX <NeoBrainX@gmail.com>2013-03-29 22:24:49 +0100
commit2afd892e466e656a2dc623bb5d6574d0d6c5533a (patch)
tree1e52ce37458c4072bdbf043e539f0a1858b3fb57 /Source/Core
parente31c2aa6013d6a95358251610c15820a34e65a35 (diff)
ShaderGen: More interface cleanups. Less wtfs :)
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoCommon/Src/PixelShaderGen.cpp3
-rw-r--r--Source/Core/VideoCommon/Src/PixelShaderGen.h4
-rw-r--r--Source/Core/VideoCommon/Src/ShaderGenCommon.h20
-rw-r--r--Source/Core/VideoCommon/Src/VertexShaderGen.cpp7
-rw-r--r--Source/Core/VideoCommon/Src/VertexShaderGen.h4
5 files changed, 18 insertions, 20 deletions
diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
index d9d45902fe..e534e2a6ca 100644
--- a/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
+++ b/Source/Core/VideoCommon/Src/PixelShaderGen.cpp
@@ -274,7 +274,8 @@ void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u
// Non-uid template parameters will write to the dummy data (=> gets optimized out)
pixel_shader_uid_data dummy_data;
- pixel_shader_uid_data& uid_data = (&out.GetUidData() != NULL) ? out.GetUidData() : dummy_data;
+ pixel_shader_uid_data& uid_data = (&out.template GetUidData<pixel_shader_uid_data>() != NULL)
+ ? out.template GetUidData<pixel_shader_uid_data>() : dummy_data;
out.SetBuffer(text);
if (out.GetBuffer() != NULL)
diff --git a/Source/Core/VideoCommon/Src/PixelShaderGen.h b/Source/Core/VideoCommon/Src/PixelShaderGen.h
index 4f9cba0c37..4881999206 100644
--- a/Source/Core/VideoCommon/Src/PixelShaderGen.h
+++ b/Source/Core/VideoCommon/Src/PixelShaderGen.h
@@ -190,8 +190,8 @@ struct pixel_shader_uid_data
};
typedef ShaderUid<pixel_shader_uid_data> PixelShaderUid;
-typedef ShaderCode<pixel_shader_uid_data> PixelShaderCode;
-typedef ShaderConstantProfile<pixel_shader_uid_data> PixelShaderConstantProfile;
+typedef ShaderCode PixelShaderCode; // TODO: Obsolete
+typedef ShaderConstantProfile PixelShaderConstantProfile; // TODO: Obsolete
void GeneratePixelShaderCode(PixelShaderCode& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components);
diff --git a/Source/Core/VideoCommon/Src/ShaderGenCommon.h b/Source/Core/VideoCommon/Src/ShaderGenCommon.h
index a2616e0a6c..a904a8e635 100644
--- a/Source/Core/VideoCommon/Src/ShaderGenCommon.h
+++ b/Source/Core/VideoCommon/Src/ShaderGenCommon.h
@@ -25,7 +25,6 @@
#include <vector>
-template<class uid_data>
class ShaderGeneratorInterface
{
public:
@@ -33,11 +32,13 @@ public:
const char* GetBuffer() { return NULL; }
void SetBuffer(char* buffer) { }
inline void SetConstantsUsed(unsigned int first_index, unsigned int last_index) {}
- uid_data& GetUidData() { return *(uid_data*)NULL; } // TODO: can be moved out, just make this GetUidData<T> instead
+
+ template<class uid_data>
+ uid_data& GetUidData() { return *(uid_data*)NULL; }
};
template<class uid_data>
-class ShaderUid : public ShaderGeneratorInterface<uid_data>
+class ShaderUid : public ShaderGeneratorInterface
{
public:
ShaderUid()
@@ -69,7 +70,8 @@ public:
return false;
}
- inline uid_data& GetUidData() { return data; }
+ template<class T>
+ inline T& GetUidData() override { return data; }
private:
union
@@ -79,9 +81,7 @@ private:
};
};
-// Needs to be a template for hacks...
-template<class uid_data>
-class ShaderCode : public ShaderGeneratorInterface<uid_data>
+class ShaderCode : public ShaderGeneratorInterface
{
public:
ShaderCode() : buf(NULL), write_ptr(NULL)
@@ -105,15 +105,11 @@ private:
char* write_ptr;
};
-template<class uid_data>
-class ShaderConstantProfile : public ShaderGeneratorInterface<uid_data>
+class ShaderConstantProfile : public ShaderGeneratorInterface
{
public:
ShaderConstantProfile(int num_constants) { constant_usage.resize(num_constants); }
- // has room for optimization (if it matters at all...)
- void NumConstants() { return constant_usage.size(); }
-
inline void SetConstantsUsed(unsigned int first_index, unsigned int last_index)
{
for (unsigned int i = first_index; i < last_index+1; ++i)
diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp
index 5ed1a73569..e27ced7b39 100644
--- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp
+++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp
@@ -85,7 +85,8 @@ void GenerateVertexShader(T& out, u32 components, API_TYPE api_type)
{
// Non-uid template parameters will write to the dummy data (=> gets optimized out)
vertex_shader_uid_data dummy_data;
- vertex_shader_uid_data& uid_data = (&out.GetUidData() != NULL) ? out.GetUidData() : dummy_data;
+ vertex_shader_uid_data& uid_data = (&out.template GetUidData<vertex_shader_uid_data>() != NULL)
+ ? out.template GetUidData<vertex_shader_uid_data>() : dummy_data;
out.SetBuffer(text);
if (out.GetBuffer() != NULL)
@@ -535,7 +536,7 @@ void GenerateVertexShaderCode(VertexShaderCode& object, u32 components, API_TYPE
GenerateVertexShader<VertexShaderCode>(object, components, api_type);
}
-void GenerateVSOutputStructForGS(ShaderCode<u32>& object, u32 components, API_TYPE api_type)
+void GenerateVSOutputStructForGS(ShaderCode& object, u32 components, API_TYPE api_type)
{
- GenerateVSOutputStruct<ShaderCode<u32> >(object, components, api_type);
+ GenerateVSOutputStruct<ShaderCode>(object, components, api_type);
}
diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h
index b6b176c806..33d27ecdf0 100644
--- a/Source/Core/VideoCommon/Src/VertexShaderGen.h
+++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h
@@ -110,10 +110,10 @@ struct vertex_shader_uid_data
};
typedef ShaderUid<vertex_shader_uid_data> VertexShaderUid;
-typedef ShaderCode<vertex_shader_uid_data> VertexShaderCode;
+typedef ShaderCode VertexShaderCode; // TODO: Obsolete..
void GetVertexShaderUid(VertexShaderUid& object, u32 components, API_TYPE api_type);
void GenerateVertexShaderCode(VertexShaderCode& object, u32 components, API_TYPE api_type);
-void GenerateVSOutputStructForGS(ShaderCode<u32>& object, u32 components, API_TYPE api_type);
+void GenerateVSOutputStructForGS(ShaderCode& object, u32 components, API_TYPE api_type);
#endif // GCOGL_VERTEXSHADER_H