Browse Source

Merge pull request #2758 from ReinUsesLisp/packed-tid

shader/decode: Implement S2R Tic
nce_cpp
bunnei 6 years ago
committed by GitHub
parent
commit
8d8341bb69
  1. 7
      src/video_core/shader/decode/other.cpp
  2. 5
      src/video_core/shader/shader_ir.cpp
  3. 3
      src/video_core/shader/shader_ir.h

7
src/video_core/shader/decode/other.cpp

@ -74,6 +74,13 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
case SystemVariable::InvocationInfo: case SystemVariable::InvocationInfo:
LOG_WARNING(HW_GPU, "MOV_SYS instruction with InvocationInfo is incomplete"); LOG_WARNING(HW_GPU, "MOV_SYS instruction with InvocationInfo is incomplete");
return Immediate(0u); return Immediate(0u);
case SystemVariable::Tid: {
Node value = Immediate(0);
value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdX), 0, 9);
value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdY), 16, 9);
value = BitfieldInsert(value, Operation(OperationCode::LocalInvocationIdZ), 26, 5);
return value;
}
case SystemVariable::TidX: case SystemVariable::TidX:
return Operation(OperationCode::LocalInvocationIdX); return Operation(OperationCode::LocalInvocationIdX);
case SystemVariable::TidY: case SystemVariable::TidY:

5
src/video_core/shader/shader_ir.cpp

@ -405,4 +405,9 @@ Node ShaderIR::BitfieldExtract(Node value, u32 offset, u32 bits) {
Immediate(offset), Immediate(bits)); Immediate(offset), Immediate(bits));
} }
Node ShaderIR::BitfieldInsert(Node base, Node insert, u32 offset, u32 bits) {
return Operation(OperationCode::UBitfieldInsert, NO_PRECISE, base, insert, Immediate(offset),
Immediate(bits));
}
} // namespace VideoCommon::Shader } // namespace VideoCommon::Shader

3
src/video_core/shader/shader_ir.h

@ -280,6 +280,9 @@ private:
/// Extracts a sequence of bits from a node /// Extracts a sequence of bits from a node
Node BitfieldExtract(Node value, u32 offset, u32 bits); Node BitfieldExtract(Node value, u32 offset, u32 bits);
/// Inserts a sequence of bits from a node
Node BitfieldInsert(Node base, Node insert, u32 offset, u32 bits);
void WriteTexInstructionFloat(NodeBlock& bb, Tegra::Shader::Instruction instr, void WriteTexInstructionFloat(NodeBlock& bb, Tegra::Shader::Instruction instr,
const Node4& components); const Node4& components);

Loading…
Cancel
Save