mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
VideoCommon: Don't pass structs between shaders, use the interface blocks instead.
This commit is contained in:
@ -221,9 +221,13 @@ private:
|
||||
};
|
||||
|
||||
template<class T>
|
||||
static void DefineOutputStructMember(T& object, API_TYPE api_type, const char* type, const char* name, int var_index, const char* semantic = "", int semantic_index = -1)
|
||||
static void DefineOutputMember(T& object, API_TYPE api_type, const char* qualifier, const char* type, const char* name, int var_index, const char* semantic = "", int semantic_index = -1)
|
||||
{
|
||||
object.Write(" %s %s", type, name);
|
||||
if (qualifier != nullptr)
|
||||
object.Write("\t%s %s %s", qualifier, type, name);
|
||||
else
|
||||
object.Write("\t%s %s", type, name);
|
||||
|
||||
if (var_index != -1)
|
||||
object.Write("%d", var_index);
|
||||
|
||||
@ -239,23 +243,35 @@ static void DefineOutputStructMember(T& object, API_TYPE api_type, const char* t
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static inline void GenerateVSOutputStruct(T& object, API_TYPE api_type)
|
||||
static inline void GenerateVSOutputMembers(T& object, API_TYPE api_type, const char* qualifier = nullptr)
|
||||
{
|
||||
object.Write("struct VS_OUTPUT {\n");
|
||||
|
||||
DefineOutputStructMember(object, api_type, "float4", "pos", -1, "POSITION");
|
||||
DefineOutputStructMember(object, api_type, "float4", "colors_", 0, "COLOR", 0);
|
||||
DefineOutputStructMember(object, api_type, "float4", "colors_", 1, "COLOR", 1);
|
||||
DefineOutputMember(object, api_type, qualifier, "float4", "pos", -1, "POSITION");
|
||||
DefineOutputMember(object, api_type, qualifier, "float4", "colors_", 0, "COLOR", 0);
|
||||
DefineOutputMember(object, api_type, qualifier, "float4", "colors_", 1, "COLOR", 1);
|
||||
|
||||
for (unsigned int i = 0; i < xfmem.numTexGen.numTexGens; ++i)
|
||||
DefineOutputStructMember(object, api_type, "float3", "tex", i, "TEXCOORD", i);
|
||||
DefineOutputMember(object, api_type, qualifier, "float3", "tex", i, "TEXCOORD", i);
|
||||
|
||||
DefineOutputStructMember(object, api_type, "float4", "clipPos", -1, "TEXCOORD", xfmem.numTexGen.numTexGens);
|
||||
DefineOutputMember(object, api_type, qualifier, "float4", "clipPos", -1, "TEXCOORD", xfmem.numTexGen.numTexGens);
|
||||
|
||||
if (g_ActiveConfig.bEnablePixelLighting)
|
||||
DefineOutputStructMember(object, api_type, "float4", "Normal", -1, "TEXCOORD", xfmem.numTexGen.numTexGens + 1);
|
||||
DefineOutputMember(object, api_type, qualifier, "float4", "Normal", -1, "TEXCOORD", xfmem.numTexGen.numTexGens + 1);
|
||||
}
|
||||
|
||||
object.Write("};\n");
|
||||
template<class T>
|
||||
static inline void AssignVSOutputMembers(T& object, const char* a, const char* b)
|
||||
{
|
||||
object.Write("\t%s.pos = %s.pos;\n", a, b);
|
||||
object.Write("\t%s.colors_0 = %s.colors_0;\n", a, b);
|
||||
object.Write("\t%s.colors_1 = %s.colors_1;\n", a, b);
|
||||
|
||||
for (unsigned int i = 0; i < xfmem.numTexGen.numTexGens; ++i)
|
||||
object.Write("\t%s.tex%d = %s.tex%d;\n", a, i, b, i);
|
||||
|
||||
object.Write("\t%s.clipPos = %s.clipPos;\n", a, b);
|
||||
|
||||
if (g_ActiveConfig.bEnablePixelLighting)
|
||||
object.Write("\t%s.Normal = %s.Normal;\n", a, b);
|
||||
}
|
||||
|
||||
// Constant variable names
|
||||
|
Reference in New Issue
Block a user