diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-11-04 13:42:49 +1300 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-11-04 13:42:49 +1300 |
| commit | e161e714c76e64d7dee98c93df6e143eae73b41e (patch) | |
| tree | bdd03a63a59cd2b61c19403df9a71689e22a2353 /Source/Core/VideoCommon | |
| parent | 9cc4cffa1d3618a875b0c9070c4e26cf3074036d (diff) | |
| parent | 71d1eb3c313535b5003884bb862635d4d2f8aae9 (diff) | |
Merge pull request #3226 from Tilka/shadergen
VideoCommon: return code/uid from shader gens
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/GeometryShaderGen.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/GeometryShaderGen.h | 4 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/PixelShaderGen.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/PixelShaderGen.h | 6 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VertexShaderGen.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VertexShaderGen.h | 4 |
6 files changed, 30 insertions, 28 deletions
diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp index f36aa94a9a..bf054464c2 100644 --- a/Source/Core/VideoCommon/GeometryShaderGen.cpp +++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp @@ -30,8 +30,9 @@ template<class T> static inline void EmitVertex(T& out, const char* vertex, API_ template<class T> static inline void EndPrimitive(T& out, API_TYPE ApiType); template<class T> -static inline void GenerateGeometryShader(T& out, u32 primitive_type, API_TYPE ApiType) +static inline T GenerateGeometryShader(u32 primitive_type, API_TYPE ApiType) { + T out; // Non-uid template parameters will write to the dummy data (=> gets optimized out) geometry_shader_uid_data dummy_data; geometry_shader_uid_data* uid_data = out.template GetUidData<geometry_shader_uid_data>(); @@ -292,6 +293,8 @@ static inline void GenerateGeometryShader(T& out, u32 primitive_type, API_TYPE A if (text[sizeof(text) - 1] != 0x7C) PanicAlert("GeometryShader generator - buffer too small, canary has been eaten!"); } + + return out; } template<class T> @@ -327,12 +330,12 @@ static inline void EndPrimitive(T& out, API_TYPE ApiType) out.Write("\toutput.RestartStrip();\n"); } -void GetGeometryShaderUid(GeometryShaderUid& object, u32 primitive_type, API_TYPE ApiType) +GeometryShaderUid GetGeometryShaderUid(u32 primitive_type, API_TYPE ApiType) { - GenerateGeometryShader<GeometryShaderUid>(object, primitive_type, ApiType); + return GenerateGeometryShader<GeometryShaderUid>(primitive_type, ApiType); } -void GenerateGeometryShaderCode(ShaderCode& object, u32 primitive_type, API_TYPE ApiType) +ShaderCode GenerateGeometryShaderCode(u32 primitive_type, API_TYPE ApiType) { - GenerateGeometryShader<ShaderCode>(object, primitive_type, ApiType); + return GenerateGeometryShader<ShaderCode>(primitive_type, ApiType); } diff --git a/Source/Core/VideoCommon/GeometryShaderGen.h b/Source/Core/VideoCommon/GeometryShaderGen.h index fc4653f380..5277e78774 100644 --- a/Source/Core/VideoCommon/GeometryShaderGen.h +++ b/Source/Core/VideoCommon/GeometryShaderGen.h @@ -26,5 +26,5 @@ struct geometry_shader_uid_data typedef ShaderUid<geometry_shader_uid_data> GeometryShaderUid; -void GenerateGeometryShaderCode(ShaderCode& object, u32 primitive_type, API_TYPE ApiType); -void GetGeometryShaderUid(GeometryShaderUid& object, u32 primitive_type, API_TYPE ApiType); +ShaderCode GenerateGeometryShaderCode(u32 primitive_type, API_TYPE ApiType); +GeometryShaderUid GetGeometryShaderUid(u32 primitive_type, API_TYPE ApiType); diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index e3d2ea87e9..a1cfcc4611 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -166,8 +166,9 @@ template<class T> static inline void WriteAlphaTest(T& out, pixel_shader_uid_dat template<class T> static inline void WriteFog(T& out, pixel_shader_uid_data* uid_data); template<class T> -static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) +static inline T GeneratePixelShader(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) { + T out; const u32 components = VertexLoaderManager::g_current_components; // Non-uid template parameters will write to the dummy data (=> gets optimized out) pixel_shader_uid_data dummy_data; @@ -667,6 +668,8 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T if (text[sizeof(text) - 1] != 0x7C) PanicAlert("PixelShader generator - buffer too small, canary has been eaten!"); } + + return out; } @@ -1170,17 +1173,12 @@ static inline void WriteFog(T& out, pixel_shader_uid_data* uid_data) out.Write("\tprev.rgb = (prev.rgb * (256 - ifog) + " I_FOGCOLOR".rgb * ifog) >> 8;\n"); } -void GetPixelShaderUid(PixelShaderUid& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) -{ - GeneratePixelShader<PixelShaderUid>(object, dstAlphaMode, ApiType); -} - -void GeneratePixelShaderCode(ShaderCode& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) +PixelShaderUid GetPixelShaderUid(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) { - GeneratePixelShader<ShaderCode>(object, dstAlphaMode, ApiType); + return GeneratePixelShader<PixelShaderUid>(dstAlphaMode, ApiType); } -void GetPixelShaderConstantProfile(PixelShaderConstantProfile& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) +ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType) { - GeneratePixelShader<PixelShaderConstantProfile>(object, dstAlphaMode, ApiType); + return GeneratePixelShader<ShaderCode>(dstAlphaMode, ApiType); } diff --git a/Source/Core/VideoCommon/PixelShaderGen.h b/Source/Core/VideoCommon/PixelShaderGen.h index 638ff9b2bc..70f75958ca 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.h +++ b/Source/Core/VideoCommon/PixelShaderGen.h @@ -114,8 +114,6 @@ struct pixel_shader_uid_data #pragma pack() typedef ShaderUid<pixel_shader_uid_data> PixelShaderUid; -typedef ShaderConstantProfile PixelShaderConstantProfile; // TODO: Obsolete -void GeneratePixelShaderCode(ShaderCode& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType); -void GetPixelShaderUid(PixelShaderUid& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType); -void GetPixelShaderConstantProfile(PixelShaderConstantProfile& object, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType); +ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType); +PixelShaderUid GetPixelShaderUid(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType); diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp index f00a6d760c..4f6331cfde 100644 --- a/Source/Core/VideoCommon/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/VertexShaderGen.cpp @@ -16,8 +16,9 @@ static char text[16768]; template<class T> -static inline void GenerateVertexShader(T& out, API_TYPE api_type) +static inline T GenerateVertexShader(API_TYPE api_type) { + T out; const u32 components = VertexLoaderManager::g_current_components; // Non-uid template parameters will write to the dummy data (=> gets optimized out) vertex_shader_uid_data dummy_data; @@ -394,14 +395,16 @@ static inline void GenerateVertexShader(T& out, API_TYPE api_type) if (text[sizeof(text) - 1] != 0x7C) PanicAlert("VertexShader generator - buffer too small, canary has been eaten!"); } + + return out; } -void GetVertexShaderUid(VertexShaderUid& object, API_TYPE api_type) +VertexShaderUid GetVertexShaderUid(API_TYPE api_type) { - GenerateVertexShader<VertexShaderUid>(object, api_type); + return GenerateVertexShader<VertexShaderUid>(api_type); } -void GenerateVertexShaderCode(ShaderCode& object, API_TYPE api_type) +ShaderCode GenerateVertexShaderCode(API_TYPE api_type) { - GenerateVertexShader<ShaderCode>(object, api_type); + return GenerateVertexShader<ShaderCode>(api_type); } diff --git a/Source/Core/VideoCommon/VertexShaderGen.h b/Source/Core/VideoCommon/VertexShaderGen.h index 45cc9bbac3..df79751df3 100644 --- a/Source/Core/VideoCommon/VertexShaderGen.h +++ b/Source/Core/VideoCommon/VertexShaderGen.h @@ -60,5 +60,5 @@ struct vertex_shader_uid_data typedef ShaderUid<vertex_shader_uid_data> VertexShaderUid; -void GetVertexShaderUid(VertexShaderUid& object, API_TYPE api_type); -void GenerateVertexShaderCode(ShaderCode& object, API_TYPE api_type); +VertexShaderUid GetVertexShaderUid(API_TYPE api_type); +ShaderCode GenerateVertexShaderCode(API_TYPE api_type); |
