Browse Source

shader_ir/other: Implement S2R InvocationId

nce_cpp
ReinUsesLisp 6 years ago
parent
commit
72b999d789
  1. 5
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp
  2. 1
      src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
  3. 2
      src/video_core/shader/decode/other.cpp
  4. 1
      src/video_core/shader/node.h

5
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@ -1915,6 +1915,10 @@ private:
return {};
}
Expression InvocationId(Operation operation) {
return {"gl_InvocationID", Type::Int};
}
Expression YNegate(Operation operation) {
return {"y_direction", Type::Float};
}
@ -2153,6 +2157,7 @@ private:
&GLSLDecompiler::EmitVertex,
&GLSLDecompiler::EndPrimitive,
&GLSLDecompiler::InvocationId,
&GLSLDecompiler::YNegate,
&GLSLDecompiler::LocalInvocationId<0>,
&GLSLDecompiler::LocalInvocationId<1>,

1
src/video_core/renderer_vulkan/vk_shader_decompiler.cpp

@ -2357,6 +2357,7 @@ private:
&SPIRVDecompiler::EmitVertex,
&SPIRVDecompiler::EndPrimitive,
&SPIRVDecompiler::InvocationId,
&SPIRVDecompiler::YNegate,
&SPIRVDecompiler::LocalInvocationId<0>,
&SPIRVDecompiler::LocalInvocationId<1>,

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

@ -69,6 +69,8 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
case OpCode::Id::MOV_SYS: {
const Node value = [this, instr] {
switch (instr.sys20) {
case SystemVariable::InvocationId:
return Operation(OperationCode::InvocationId);
case SystemVariable::Ydirection:
return Operation(OperationCode::YNegate);
case SystemVariable::InvocationInfo:

1
src/video_core/shader/node.h

@ -172,6 +172,7 @@ enum class OperationCode {
EmitVertex, /// () -> void
EndPrimitive, /// () -> void
InvocationId, /// () -> int
YNegate, /// () -> float
LocalInvocationIdX, /// () -> uint
LocalInvocationIdY, /// () -> uint

Loading…
Cancel
Save