private void GenInst1u(ShaderProgram Program, uint InstOp) { ShaderOpCode OpCode = (ShaderOpCode)(InstOp >> 26); ShaderInst1 Inst = new ShaderInst1(InstOp); string Dest = GetDstReg(Program, Inst.Dest); string Src1 = GetSrcReg(Program, Inst.Src1, Inst.Idx1); SHBin.GetSwizzles( Inst.Desc, out string SDst, out string[] SSrc, out string[] SSrcM); string[] Signs = SHBin.GetSrcSigns(Inst.Desc); Src1 = Signs[0] + Src1; switch (OpCode) { case ShaderOpCode.Ex2: Append($"{Dest}.{SDst} = exp2({Src1}.{SSrcM[0]});"); break; case ShaderOpCode.Lg2: Append($"{Dest}.{SDst} = log2({Src1}.{SSrcM[0]});"); break; case ShaderOpCode.LitP: GenLitP(Src1, Dest); break; case ShaderOpCode.Flr: Append($"{Dest}.{SDst} = floor({Src1}.{SSrcM[0]});"); break; case ShaderOpCode.Rcp: Append($"{Dest}.{SDst} = {GetVecCtor("1", SDst.Length)} / {Src1}.{SSrcM[0]};"); break; case ShaderOpCode.RSq: Append($"{Dest}.{SDst} = inversesqrt({Src1}.{SSrcM[0]});"); break; case ShaderOpCode.MovA: GenMovA(Src1, SSrcM[0], SDst); break; case ShaderOpCode.Mov: Append($"{Dest}.{SDst} = {Src1}.{SSrcM[0]};"); break; } }
private void GenInst1(ShaderProgram Program, uint InstOp) { ShaderOpCode OpCode = (ShaderOpCode)(InstOp >> 26); ShaderInst1 Inst = new ShaderInst1(InstOp); string Dest = GetDstReg(Program, Inst.Dest); string Src1 = GetSrcReg(Program, Inst.Src1, Inst.Idx1); string Src2 = GetSrcReg(Program, Inst.Src2); SHBin.GetSwizzles( Inst.Desc, out string SDst, out string[] SSrc, out string[] SSrcM); string[] Signs = SHBin.GetSrcSigns(Inst.Desc); Src1 = Signs[0] + Src1; Src2 = Signs[1] + Src2; switch (OpCode) { case ShaderOpCode.Add: Append($"{Dest}.{SDst} = {Src1}.{SSrcM[0]} + {Src2}.{SSrcM[1]};"); break; case ShaderOpCode.DP3: GenDP3(Src1, Src2, SSrc[0], SSrc[1], Dest, SDst); break; case ShaderOpCode.DP4: Append($"{Dest}.{SDst} = {GetVecCtor($"dot({Src1}.{SSrc[0]}, {Src2}.{SSrc[1]})", SDst.Length)};"); break; case ShaderOpCode.DPH: GenDPH(Src1, Src2, SSrc[0], SSrc[1], Dest, SDst); break; case ShaderOpCode.Dst: Append($"{Dest} = vec4(1, {Src1}.y * {Src1}.y, {Src1}.z, {Src2}.w);"); break; case ShaderOpCode.Mul: Append($"{Dest}.{SDst} = {Src1}.{SSrcM[0]} * {Src2}.{SSrcM[1]};"); break; case ShaderOpCode.SGE: GenSGE(Src1, Src1, SSrcM[0], SSrcM[1], Dest, SDst); break; case ShaderOpCode.SLT: GenSLT(Src1, Src1, SSrcM[0], SSrcM[1], Dest, SDst); break; case ShaderOpCode.Max: Append($"{Dest}.{SDst} = max({Src1}.{SSrcM[0]}, {Src2}.{SSrcM[1]});"); break; case ShaderOpCode.Min: Append($"{Dest}.{SDst} = min({Src1}.{SSrcM[0]}, {Src2}.{SSrcM[1]});"); break; } }