Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
VideoCommon: cleanup of "components" usage
This "u32 components" is a list of flags which attributes of the vertex loader are present.
We are used to append this variable to lots of vertex generation functions, but some of them don't need it at all.
  • Loading branch information
degasus committed Jan 15, 2014
1 parent a561c43 commit 5e5db9f
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 37 deletions.
2 changes: 1 addition & 1 deletion Source/Core/VideoBackends/D3D/LineGeometryShader.cpp
Expand Up @@ -172,7 +172,7 @@ bool LineGeometryShader::SetShader(u32 components, float lineWidth,
static char buffer[16384];
ShaderCode code;
code.SetBuffer(buffer);
GenerateVSOutputStructForGS(code, components, API_D3D);
GenerateVSOutputStructForGS(code, API_D3D);
code.Write("\n%s", LINE_GS_COMMON);

std::stringstream numTexCoordsStream;
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoBackends/D3D/PointGeometryShader.cpp
Expand Up @@ -166,7 +166,7 @@ bool PointGeometryShader::SetShader(u32 components, float pointSize,
static char buffer[16384];
ShaderCode code;
code.SetBuffer(buffer);
GenerateVSOutputStructForGS(code, components, API_D3D);
GenerateVSOutputStructForGS(code, API_D3D);
code.Write("\n%s", POINT_GS_COMMON);

std::stringstream numTexCoordsStream;
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoBackends/D3D/VertexManager.cpp
Expand Up @@ -238,7 +238,7 @@ void VertexManager::vFlush()

// set global constants
VertexShaderManager::SetConstants();
PixelShaderManager::SetConstants(g_nativeVertexFmt->m_components);
PixelShaderManager::SetConstants();

bool useDstAlpha = !g_ActiveConfig.bDstAlphaPass && bpmem.dstalpha.enable && bpmem.blendmode.alphaupdate &&
bpmem.zcontrol.pixel_format == PIXELFMT_RGBA6_Z24;
Expand Down
4 changes: 2 additions & 2 deletions Source/Core/VideoBackends/OGL/VertexManager.cpp
Expand Up @@ -259,7 +259,7 @@ void VertexManager::vFlush()

// set global constants
VertexShaderManager::SetConstants();
PixelShaderManager::SetConstants(g_nativeVertexFmt->m_components);
PixelShaderManager::SetConstants();
ProgramShaderCache::UploadConstants();

// setup the pointers
Expand All @@ -280,7 +280,7 @@ void VertexManager::vFlush()
{
// Need to set these again, if we don't support UBO
VertexShaderManager::SetConstants();
PixelShaderManager::SetConstants(g_nativeVertexFmt->m_components);
PixelShaderManager::SetConstants();
}

// only update alpha
Expand Down
1 change: 0 additions & 1 deletion Source/Core/VideoCommon/NativeVertexFormat.h
Expand Up @@ -101,7 +101,6 @@ class NativeVertexFormat : NonCopyable

virtual void Initialize(const PortableVertexDeclaration &vtx_decl) = 0;
virtual void SetupVertexPointers() = 0;
virtual void EnableComponents(u32 components) {}

u32 GetVertexStride() const { return vertex_stride; }

Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoCommon/PixelShaderManager.cpp
Expand Up @@ -65,7 +65,7 @@ void PixelShaderManager::Shutdown()

}

void PixelShaderManager::SetConstants(u32 components)
void PixelShaderManager::SetConstants()
{
if (s_bFogRangeAdjustChanged)
{
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoCommon/PixelShaderManager.h
Expand Up @@ -23,7 +23,7 @@ class PixelShaderManager
static void Shutdown();
static void DoState(PointerWrap &p);

static void SetConstants(u32 components); // sets pixel shader constants
static void SetConstants(); // sets pixel shader constants

// constant management, should be called after memory is committed
static void SetColorChanged(int type, int index);
Expand Down
46 changes: 22 additions & 24 deletions Source/Core/VideoCommon/VertexLoader.cpp
Expand Up @@ -178,7 +178,7 @@ VertexLoader::VertexLoader(const TVtxDesc &vtx_desc, const VAT &vtx_attr)
m_numLoadedVertices = 0;
m_VertexSize = 0;
m_numPipelineStages = 0;
m_NativeFmt = g_vertex_manager->CreateNativeVertexFormat();
m_NativeFmt = 0;
loop_counter = 0;
VertexLoader_Normal::Init();
VertexLoader_Position::Init();
Expand Down Expand Up @@ -251,9 +251,7 @@ void VertexLoader::CompileVertexTranslator()

// Reset pipeline
m_numPipelineStages = 0;

// It's a bit ugly that we poke inside m_NativeFmt in this function. Planning to fix this.
m_NativeFmt->m_components = 0;
u32 components = 0;

// Position in pc vertex format.
int nat_offset = 0;
Expand All @@ -270,18 +268,18 @@ void VertexLoader::CompileVertexTranslator()
if (m_VtxDesc.PosMatIdx)
{
WriteCall(PosMtx_ReadDirect_UByte);
m_NativeFmt->m_components |= VB_HAS_POSMTXIDX;
components |= VB_HAS_POSMTXIDX;
m_VertexSize += 1;
}

if (m_VtxDesc.Tex0MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX0; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex1MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX1; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex2MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX2; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex3MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX3; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex4MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX4; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex5MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX5; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex6MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX6; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex7MatIdx) {m_VertexSize += 1; m_NativeFmt->m_components |= VB_HAS_TEXMTXIDX7; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex0MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX0; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex1MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX1; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex2MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX2; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex3MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX3; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex4MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX4; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex5MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX5; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex6MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX6; WriteCall(TexMtx_ReadDirect_UByte); }
if (m_VtxDesc.Tex7MatIdx) {m_VertexSize += 1; components |= VB_HAS_TEXMTXIDX7; WriteCall(TexMtx_ReadDirect_UByte); }

// Write vertex position loader
if(g_ActiveConfig.bUseBBox)
Expand Down Expand Up @@ -333,22 +331,22 @@ void VertexLoader::CompileVertexTranslator()
}

int numNormals = (m_VtxAttr.NormalElements == 1) ? NRM_THREE : NRM_ONE;
m_NativeFmt->m_components |= VB_HAS_NRM0;
components |= VB_HAS_NRM0;

if (numNormals == NRM_THREE)
m_NativeFmt->m_components |= VB_HAS_NRM1 | VB_HAS_NRM2;
components |= VB_HAS_NRM1 | VB_HAS_NRM2;
}

vtx_decl.color_gl_type = VAR_UNSIGNED_BYTE;
vtx_decl.color_offset[0] = -1;
vtx_decl.color_offset[1] = -1;
for (int i = 0; i < 2; i++)
{
m_NativeFmt->m_components |= VB_HAS_COL0 << i;
components |= VB_HAS_COL0 << i;
switch (col[i])
{
case NOT_PRESENT:
m_NativeFmt->m_components &= ~(VB_HAS_COL0 << i);
components &= ~(VB_HAS_COL0 << i);
vtx_decl.color_offset[i] = -1;
break;
case DIRECT:
Expand Down Expand Up @@ -407,20 +405,20 @@ void VertexLoader::CompileVertexTranslator()

if (tc[i] == NOT_PRESENT)
{
m_NativeFmt->m_components &= ~(VB_HAS_UV0 << i);
components &= ~(VB_HAS_UV0 << i);
}
else
{
_assert_msg_(VIDEO, DIRECT <= tc[i] && tc[i] <= INDEX16, "Invalid texture coordinates!\n(tc[i] = %d)", tc[i]);
_assert_msg_(VIDEO, FORMAT_UBYTE <= format && format <= FORMAT_FLOAT, "Invalid texture coordinates format!\n(format = %d)", format);
_assert_msg_(VIDEO, 0 <= elements && elements <= 1, "Invalid number of texture coordinates elements!\n(elements = %d)", elements);

m_NativeFmt->m_components |= VB_HAS_UV0 << i;
components |= VB_HAS_UV0 << i;
WriteCall(VertexLoader_TextCoord::GetFunction(tc[i], format, elements));
m_VertexSize += VertexLoader_TextCoord::GetSize(tc[i], format, elements);
}

if (m_NativeFmt->m_components & (VB_HAS_TEXMTXIDX0 << i))
if (components & (VB_HAS_TEXMTXIDX0 << i))
{
if (tc[i] != NOT_PRESENT)
{
Expand All @@ -433,7 +431,7 @@ void VertexLoader::CompileVertexTranslator()
}
else
{
m_NativeFmt->m_components |= VB_HAS_UV0 << i; // have to include since using now
components |= VB_HAS_UV0 << i; // have to include since using now
vtx_decl.texcoord_offset[i] = nat_offset;
vtx_decl.texcoord_gl_type[i] = VAR_FLOAT;
vtx_decl.texcoord_size[i] = 4;
Expand Down Expand Up @@ -465,7 +463,7 @@ void VertexLoader::CompileVertexTranslator()
}
}
// tricky!
if (j == 8 && !((m_NativeFmt->m_components & VB_HAS_TEXMTXIDXALL) & (VB_HAS_TEXMTXIDXALL << (i + 1))))
if (j == 8 && !((components & VB_HAS_TEXMTXIDXALL) & (VB_HAS_TEXMTXIDXALL << (i + 1))))
{
// no more tex coords and tex matrices, so exit loop
break;
Expand Down Expand Up @@ -500,6 +498,8 @@ void VertexLoader::CompileVertexTranslator()
ABI_PopAllCalleeSavedRegsAndAdjustStack();
RET();
#endif
m_NativeFmt = g_vertex_manager->CreateNativeVertexFormat();
m_NativeFmt->m_components = components;
m_NativeFmt->Initialize(vtx_decl);
}

Expand Down Expand Up @@ -565,8 +565,6 @@ int VertexLoader::SetupRunVertices(int vtx_attr_group, int primitive, int const
return 0;
}

m_NativeFmt->EnableComponents(m_NativeFmt->m_components);

// Load position and texcoord scale factors.
m_VtxAttr.PosFrac = g_VtxAttr[vtx_attr_group].g0.PosFrac;
m_VtxAttr.texCoord[0].Frac = g_VtxAttr[vtx_attr_group].g0.Tex0Frac;
Expand Down
8 changes: 4 additions & 4 deletions Source/Core/VideoCommon/VertexShaderGen.cpp
Expand Up @@ -38,7 +38,7 @@ static void DefineVSOutputStructMember(T& object, API_TYPE api_type, const char*
}

template<class T>
static inline void GenerateVSOutputStruct(T& object, u32 components, API_TYPE api_type)
static inline void GenerateVSOutputStruct(T& object, API_TYPE api_type)
{
object.Write("struct VS_OUTPUT {\n");
DefineVSOutputStructMember(object, api_type, "float4", "pos", -1, "POSITION");
Expand Down Expand Up @@ -99,7 +99,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
if (g_ActiveConfig.backend_info.bSupportsGLSLUBO)
out.Write("};\n");

GenerateVSOutputStruct(out, components, api_type);
GenerateVSOutputStruct(out, api_type);

uid_data.numTexGens = xfregs.numTexGen.numTexGens;
uid_data.components = components;
Expand Down Expand Up @@ -467,7 +467,7 @@ void GenerateVertexShaderCode(VertexShaderCode& object, u32 components, API_TYPE
GenerateVertexShader<VertexShaderCode>(object, components, api_type);
}

void GenerateVSOutputStructForGS(ShaderCode& object, u32 components, API_TYPE api_type)
void GenerateVSOutputStructForGS(ShaderCode& object, API_TYPE api_type)
{
GenerateVSOutputStruct<ShaderCode>(object, components, api_type);
GenerateVSOutputStruct<ShaderCode>(object, api_type);
}
2 changes: 1 addition & 1 deletion Source/Core/VideoCommon/VertexShaderGen.h
Expand Up @@ -90,6 +90,6 @@ 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& object, u32 components, API_TYPE api_type);
void GenerateVSOutputStructForGS(ShaderCode& object, API_TYPE api_type);

#endif // GCOGL_VERTEXSHADER_H

0 comments on commit 5e5db9f

Please sign in to comment.