mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-20 19:39:12 +00:00
SIMD refactor
This commit is contained in:
@@ -104,7 +104,7 @@ unsigned GX::RecursiveTraceTexGen(const IR& ir, Diagnostics& diag, const IR::Ins
|
||||
diag.reportBackendErr(inst.m_loc, "TexCoordGen UV(layerIdx) requires one argument");
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
auto& idxImm = idxInst.getImmVec();
|
||||
return addTexCoordGen(diag, inst.m_loc, TexGenSrc(TG_TEX0 + unsigned(idxImm.vec[0])), mtx, normalize, pmtx);
|
||||
return addTexCoordGen(diag, inst.m_loc, TexGenSrc(TG_TEX0 + unsigned(idxImm.simd[0])), mtx, normalize, pmtx);
|
||||
}
|
||||
else if (!tcgName.compare("Normal"))
|
||||
return addTexCoordGen(diag, inst.m_loc, TG_NRM, mtx, normalize, pmtx);
|
||||
@@ -147,7 +147,7 @@ GX::TraceResult GX::RecursiveTraceColor(const IR& ir, Diagnostics& diag, const I
|
||||
|
||||
const IR::Instruction& mapInst = inst.getChildInst(ir, 0);
|
||||
auto& mapImm = mapInst.getImmVec();
|
||||
newStage.m_texMapIdx = unsigned(mapImm.vec[0]);
|
||||
newStage.m_texMapIdx = unsigned(mapImm.simd[0]);
|
||||
newStage.m_color[0] = swizzleAlpha ? CC_TEXA : CC_TEXC;
|
||||
|
||||
const IR::Instruction& tcgInst = inst.getChildInst(ir, 1);
|
||||
@@ -158,7 +158,7 @@ GX::TraceResult GX::RecursiveTraceColor(const IR& ir, Diagnostics& diag, const I
|
||||
else if (!name.compare("ColorReg"))
|
||||
{
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().vec[0]);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().simd[0]);
|
||||
if (swizzleAlpha)
|
||||
m_aRegMask |= 1 << idx;
|
||||
else
|
||||
@@ -176,9 +176,9 @@ GX::TraceResult GX::RecursiveTraceColor(const IR& ir, Diagnostics& diag, const I
|
||||
case IR::OpType::LoadImm:
|
||||
{
|
||||
const atVec4f& vec = inst.m_loadImm.m_immVec;
|
||||
if (vec.vec[0] == 0.f && vec.vec[1] == 0.f && vec.vec[2] == 0.f)
|
||||
if (vec.simd[0] == 0.f && vec.simd[1] == 0.f && vec.simd[2] == 0.f)
|
||||
return TraceResult(CC_ZERO);
|
||||
else if (vec.vec[0] == 1.f && vec.vec[1] == 1.f && vec.vec[2] == 1.f)
|
||||
else if (vec.simd[0] == 1.f && vec.simd[1] == 1.f && vec.simd[2] == 1.f)
|
||||
return TraceResult(CC_ONE);
|
||||
unsigned idx = addKColor(diag, inst.m_loc, vec);
|
||||
return TraceResult(TevKColorSel(TEV_KCSEL_K0 + idx));
|
||||
@@ -438,7 +438,7 @@ GX::TraceResult GX::RecursiveTraceAlpha(const IR& ir, Diagnostics& diag, const I
|
||||
|
||||
const IR::Instruction& mapInst = inst.getChildInst(ir, 0);
|
||||
const atVec4f& mapImm = mapInst.getImmVec();
|
||||
unsigned mapIdx = unsigned(mapImm.vec[0]);
|
||||
unsigned mapIdx = unsigned(mapImm.simd[0]);
|
||||
|
||||
int foundStage = -1;
|
||||
for (int i=m_alphaTraceStage+1 ; i<int(m_tevCount) ; ++i)
|
||||
@@ -473,7 +473,7 @@ GX::TraceResult GX::RecursiveTraceAlpha(const IR& ir, Diagnostics& diag, const I
|
||||
else if (!name.compare("ColorReg"))
|
||||
{
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().vec[0]);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().simd[0]);
|
||||
m_aRegMask |= 1 << idx;
|
||||
return TraceResult(TevAlphaArg(CA_A0 + idx));
|
||||
}
|
||||
@@ -488,11 +488,11 @@ GX::TraceResult GX::RecursiveTraceAlpha(const IR& ir, Diagnostics& diag, const I
|
||||
case IR::OpType::LoadImm:
|
||||
{
|
||||
const atVec4f& vec = inst.m_loadImm.m_immVec;
|
||||
if (vec.vec[0] == 0.f)
|
||||
if (vec.simd[0] == 0.f)
|
||||
return TraceResult(CA_ZERO);
|
||||
else if (vec.vec[0] == 1.f)
|
||||
else if (vec.simd[0] == 1.f)
|
||||
return TraceResult(TEV_KASEL_1);
|
||||
unsigned idx = addKAlpha(diag, inst.m_loc, vec.vec[0]);
|
||||
unsigned idx = addKAlpha(diag, inst.m_loc, vec.simd[0]);
|
||||
return TraceResult(TevKAlphaSel(TEV_KASEL_K0_A + idx));
|
||||
}
|
||||
case IR::OpType::Arithmetic:
|
||||
|
||||
@@ -183,23 +183,23 @@ std::string Metal::makeVert(unsigned col, unsigned uv, unsigned w,
|
||||
retval += " float4 objPos = float4(0.0,0.0,0.0,0.0);\n"
|
||||
" float4 objNorm = float4(0.0,0.0,0.0,0.0);\n";
|
||||
for (size_t i=0 ; i<s ; ++i)
|
||||
retval += hecl::Format(" objPos += (vu.mv[%" PRISize "] * float4(v.posIn, 1.0)) * v.weightIn%" PRISize "[%" PRISize "];\n"
|
||||
" objNorm += (vu.mvInv[%" PRISize "] * float4(v.normIn, 1.0)) * v.weightIn%" PRISize "[%" PRISize "];\n",
|
||||
retval += hecl::Format(" objPos += (vu.objs[%" PRISize "] * float4(v.posIn, 1.0)) * v.weightIn%" PRISize "[%" PRISize "];\n"
|
||||
" objNorm += (vu.objsInv[%" PRISize "] * float4(v.normIn, 1.0)) * v.weightIn%" PRISize "[%" PRISize "];\n",
|
||||
i, i/4, i%4, i, i/4, i%4);
|
||||
retval += " objPos[3] = 1.0;\n"
|
||||
" objNorm = float4(normalize(objNorm.xyz), 0.0);\n"
|
||||
" vtf.mvPos = mv * objPos;\n"
|
||||
" vtf.mvNorm = float4(normalize((mvInv * objNorm).xyz), 0.0);\n"
|
||||
" vtf.mvpPos = proj * vtf.mvPos;\n";
|
||||
" vtf.mvPos = vu.mv * objPos;\n"
|
||||
" vtf.mvNorm = float4(normalize((vu.mvInv * objNorm).xyz), 0.0);\n"
|
||||
" vtf.mvpPos = vu.proj * vtf.mvPos;\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
/* non-skinned */
|
||||
retval += " float4 objPos = float4(posIn, 1.0);\n"
|
||||
" float4 objNorm = float4(normIn, 0.0);\n"
|
||||
" vtf.mvPos = mv * objPos;\n"
|
||||
" vtf.mvNorm = mvInv * objNorm;\n"
|
||||
" vtf.mvpPos = proj * vtf.mvPos;\n";
|
||||
retval += " float4 objPos = float4(v.posIn, 1.0);\n"
|
||||
" float4 objNorm = float4(v.normIn, 0.0);\n"
|
||||
" vtf.mvPos = vu.mv * objPos;\n"
|
||||
" vtf.mvNorm = vu.mvInv * objNorm;\n"
|
||||
" vtf.mvpPos = vu.proj * vtf.mvPos;\n";
|
||||
}
|
||||
|
||||
retval += " float4 tmpProj;\n";
|
||||
|
||||
@@ -84,7 +84,7 @@ unsigned ProgrammableCommon::RecursiveTraceTexGen(const IR& ir, Diagnostics& dia
|
||||
diag.reportBackendErr(inst.m_loc, "TexCoordGen UV(layerIdx) requires one argument");
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
auto& idxImm = idxInst.getImmVec();
|
||||
return addTexCoordGen(TexGenSrc::UV, idxImm.vec[0], mtx, normalize);
|
||||
return addTexCoordGen(TexGenSrc::UV, int(idxImm.simd[0]), mtx, normalize);
|
||||
}
|
||||
else if (!tcgName.compare("Normal"))
|
||||
return addTexCoordGen(TexGenSrc::Normal, -1, mtx, normalize);
|
||||
@@ -123,7 +123,7 @@ std::string ProgrammableCommon::RecursiveTraceColor(const IR& ir, Diagnostics& d
|
||||
|
||||
const IR::Instruction& mapInst = inst.getChildInst(ir, 0);
|
||||
auto& mapImm = mapInst.getImmVec();
|
||||
unsigned mapIdx = unsigned(mapImm.vec[0]);
|
||||
unsigned mapIdx = unsigned(mapImm.simd[0]);
|
||||
|
||||
const IR::Instruction& tcgInst = inst.getChildInst(ir, 1);
|
||||
unsigned texGenIdx = RecursiveTraceTexGen(ir, diag, tcgInst, -1, normalize);
|
||||
@@ -134,7 +134,7 @@ std::string ProgrammableCommon::RecursiveTraceColor(const IR& ir, Diagnostics& d
|
||||
else if (!name.compare("ColorReg"))
|
||||
{
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().vec[0]);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().simd[0]);
|
||||
return toSwizzle ? EmitColorRegUseRaw(idx) : EmitColorRegUseRGB(idx);
|
||||
}
|
||||
else if (!name.compare("Lighting"))
|
||||
@@ -221,7 +221,7 @@ std::string ProgrammableCommon::RecursiveTraceAlpha(const IR& ir, Diagnostics& d
|
||||
|
||||
const IR::Instruction& mapInst = inst.getChildInst(ir, 0);
|
||||
const atVec4f& mapImm = mapInst.getImmVec();
|
||||
unsigned mapIdx = unsigned(mapImm.vec[0]);
|
||||
unsigned mapIdx = unsigned(mapImm.simd[0]);
|
||||
|
||||
const IR::Instruction& tcgInst = inst.getChildInst(ir, 1);
|
||||
unsigned texGenIdx = RecursiveTraceTexGen(ir, diag, tcgInst, -1, normalize);
|
||||
@@ -232,7 +232,7 @@ std::string ProgrammableCommon::RecursiveTraceAlpha(const IR& ir, Diagnostics& d
|
||||
else if (!name.compare("ColorReg"))
|
||||
{
|
||||
const IR::Instruction& idxInst = inst.getChildInst(ir, 0);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().vec[0]);
|
||||
unsigned idx = unsigned(idxInst.getImmVec().simd[0]);
|
||||
return toSwizzle ? EmitColorRegUseRaw(idx) : EmitColorRegUseAlpha(idx);
|
||||
}
|
||||
else if (!name.compare("Lighting"))
|
||||
@@ -247,7 +247,7 @@ std::string ProgrammableCommon::RecursiveTraceAlpha(const IR& ir, Diagnostics& d
|
||||
case IR::OpType::LoadImm:
|
||||
{
|
||||
const atVec4f& vec = inst.m_loadImm.m_immVec;
|
||||
return EmitVal(vec.vec[0]);
|
||||
return EmitVal(vec.simd[0]);
|
||||
}
|
||||
case IR::OpType::Arithmetic:
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user