diff --git a/Source/Core/VideoBackends/Software/TransformUnit.cpp b/Source/Core/VideoBackends/Software/TransformUnit.cpp index 3babc89fc4..8fff7ded27 100644 --- a/Source/Core/VideoBackends/Software/TransformUnit.cpp +++ b/Source/Core/VideoBackends/Software/TransformUnit.cpp @@ -443,7 +443,7 @@ void TransformTexCoord(const InputVertexData* src, OutputVertexData* dst, bool s dst->texCoords[coordNum].z = 1.0f; break; default: - ERROR_LOG(VIDEO, "Bad tex gen type %i", texinfo.texgentype); + ERROR_LOG(VIDEO, "Bad tex gen type %i", texinfo.texgentype.Value()); } } diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp index 502f67f417..7807cdb98c 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/VertexManagerBase.cpp @@ -193,22 +193,24 @@ void VertexManagerBase::Flush() g_video_backend->CheckInvalidState(); #if defined(_DEBUG) || defined(DEBUGFAST) - PRIM_LOG("frame%d:\n texgen=%d, numchan=%d, dualtex=%d, ztex=%d, cole=%d, alpe=%d, ze=%d", + PRIM_LOG("frame%d:\n texgen=%u, numchan=%u, dualtex=%u, ztex=%u, cole=%u, alpe=%u, ze=%u", g_ActiveConfig.iSaveTargetId, xfmem.numTexGen.numTexGens, xfmem.numChan.numColorChans, - xfmem.dualTexTrans.enabled, (int)bpmem.ztex2.op, (int)bpmem.blendmode.colorupdate, - (int)bpmem.blendmode.alphaupdate, (int)bpmem.zmode.updateenable); + xfmem.dualTexTrans.enabled, bpmem.ztex2.op.Value(), bpmem.blendmode.colorupdate.Value(), + bpmem.blendmode.alphaupdate.Value(), bpmem.zmode.updateenable.Value()); - for (unsigned int i = 0; i < xfmem.numChan.numColorChans; ++i) + for (u32 i = 0; i < xfmem.numChan.numColorChans; ++i) { LitChannel* ch = &xfmem.color[i]; - PRIM_LOG("colchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, - ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); + PRIM_LOG("colchan%u: matsrc=%u, light=0x%x, ambsrc=%u, diffunc=%u, attfunc=%u", i, + ch->matsource.Value(), ch->GetFullLightMask(), ch->ambsource.Value(), + ch->diffusefunc.Value(), ch->attnfunc.Value()); ch = &xfmem.alpha[i]; - PRIM_LOG("alpchan%d: matsrc=%d, light=0x%x, ambsrc=%d, diffunc=%d, attfunc=%d", i, - ch->matsource, ch->GetFullLightMask(), ch->ambsource, ch->diffusefunc, ch->attnfunc); + PRIM_LOG("alpchan%u: matsrc=%u, light=0x%x, ambsrc=%u, diffunc=%u, attfunc=%u", i, + ch->matsource.Value(), ch->GetFullLightMask(), ch->ambsource.Value(), + ch->diffusefunc.Value(), ch->attnfunc.Value()); } - for (unsigned int i = 0; i < xfmem.numTexGen.numTexGens; ++i) + for (u32 i = 0; i < xfmem.numTexGen.numTexGens; ++i) { TexMtxInfo tinfo = xfmem.texMtxInfo[i]; if (tinfo.texgentype != XF_TEXGEN_EMBOSS_MAP) @@ -216,16 +218,17 @@ void VertexManagerBase::Flush() if (tinfo.texgentype != XF_TEXGEN_REGULAR) tinfo.projection = 0; - PRIM_LOG("txgen%d: proj=%d, input=%d, gentype=%d, srcrow=%d, embsrc=%d, emblght=%d, " - "postmtx=%d, postnorm=%d", - i, tinfo.projection, tinfo.inputform, tinfo.texgentype, tinfo.sourcerow, - tinfo.embosssourceshift, tinfo.embosslightshift, xfmem.postMtxInfo[i].index, - xfmem.postMtxInfo[i].normalize); + PRIM_LOG("txgen%u: proj=%u, input=%u, gentype=%u, srcrow=%u, embsrc=%u, emblght=%u, " + "postmtx=%u, postnorm=%u", + i, tinfo.projection.Value(), tinfo.inputform.Value(), tinfo.texgentype.Value(), + tinfo.sourcerow.Value(), tinfo.embosssourceshift.Value(), + tinfo.embosslightshift.Value(), xfmem.postMtxInfo[i].index.Value(), + xfmem.postMtxInfo[i].normalize.Value()); } - PRIM_LOG("pixel: tev=%d, ind=%d, texgen=%d, dstalpha=%d, alphatest=0x%x", - (int)bpmem.genMode.numtevstages + 1, (int)bpmem.genMode.numindstages, - (int)bpmem.genMode.numtexgens, (u32)bpmem.dstalpha.enable, + PRIM_LOG("pixel: tev=%u, ind=%u, texgen=%u, dstalpha=%u, alphatest=0x%x", + bpmem.genMode.numtevstages.Value() + 1, bpmem.genMode.numindstages.Value(), + bpmem.genMode.numtexgens.Value(), bpmem.dstalpha.enable.Value(), (bpmem.alpha_test.hex >> 16) & 0xff); #endif diff --git a/Source/Core/VideoCommon/VertexShaderManager.cpp b/Source/Core/VideoCommon/VertexShaderManager.cpp index ea2e8a528d..c167ce63aa 100644 --- a/Source/Core/VideoCommon/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/VertexShaderManager.cpp @@ -194,7 +194,7 @@ void VertexShaderManager::Init() bProjectionChanged = true; bViewportChanged = false; - xfmem = {}; + std::memset(&xfmem, 0, sizeof(xfmem)); constants = {}; ResetView(); diff --git a/Source/Core/VideoCommon/XFMemory.h b/Source/Core/VideoCommon/XFMemory.h index b4e4ec7325..461a63e368 100644 --- a/Source/Core/VideoCommon/XFMemory.h +++ b/Source/Core/VideoCommon/XFMemory.h @@ -4,6 +4,7 @@ #pragma once +#include "Common/BitField.h" #include "Common/CommonTypes.h" #include "VideoCommon/CPMemory.h" @@ -132,27 +133,15 @@ enum union LitChannel { - struct - { - u32 matsource : 1; - u32 enablelighting : 1; - u32 lightMask0_3 : 4; - u32 ambsource : 1; - u32 diffusefunc : 2; // LIGHTDIF_X - u32 attnfunc : 2; // LIGHTATTN_X - u32 lightMask4_7 : 4; - }; - struct - { - u32 hex : 15; - u32 unused : 17; - }; - struct - { - u32 dummy0 : 7; - u32 lightparams : 4; - u32 dummy1 : 21; - }; + BitField<0, 1, u32> matsource; + BitField<1, 1, u32> enablelighting; + BitField<2, 4, u32> lightMask0_3; + BitField<6, 1, u32> ambsource; + BitField<7, 2, u32> diffusefunc; // LIGHTDIF_X + BitField<9, 2, u32> attnfunc; // LIGHTATTN_X + BitField<11, 4, u32> lightMask4_7; + u32 hex; + unsigned int GetFullLightMask() const { return enablelighting ? (lightMask0_3 | (lightMask4_7 << 4)) : 0; @@ -173,28 +162,22 @@ union INVTXSPEC union TexMtxInfo { - struct - { - u32 unknown : 1; - u32 projection : 1; // XF_TEXPROJ_X - u32 inputform : 1; // XF_TEXINPUT_X - u32 unknown2 : 1; - u32 texgentype : 3; // XF_TEXGEN_X - u32 sourcerow : 5; // XF_SRCGEOM_X - u32 embosssourceshift : 3; // what generated texcoord to use - u32 embosslightshift : 3; // light index that is used - }; + BitField<0, 1, u32> unknown; // + BitField<1, 1, u32> projection; // XF_TEXPROJ_X + BitField<2, 1, u32> inputform; // XF_TEXINPUT_X + BitField<3, 1, u32> unknown2; // + BitField<4, 3, u32> texgentype; // XF_TEXGEN_X + BitField<7, 5, u32> sourcerow; // XF_SRCGEOM_X + BitField<12, 3, u32> embosssourceshift; // what generated texcoord to use + BitField<15, 3, u32> embosslightshift; // light index that is used u32 hex; }; union PostMtxInfo { - struct - { - u32 index : 6; // base row of dual transform matrix - u32 unused : 2; - u32 normalize : 1; // normalize before send operation - }; + BitField<0, 6, u32> index; // base row of dual transform matrix + BitField<6, 2, u32> unused; // + BitField<8, 1, u32> normalize; // normalize before send operation u32 hex; };