Browse Source
shader_ir/other: Implement S2R InvocationId
pull/15/merge
ReinUsesLisp
6 years ago
No known key found for this signature in database
GPG Key ID: 2DFC508897B39CFE
4 changed files with
9 additions and
0 deletions
-
src/video_core/renderer_opengl/gl_shader_decompiler.cpp
-
src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
-
src/video_core/shader/decode/other.cpp
-
src/video_core/shader/node.h
|
|
|
@ -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>, |
|
|
|
|
|
|
|
@ -2357,6 +2357,7 @@ private: |
|
|
|
&SPIRVDecompiler::EmitVertex, |
|
|
|
&SPIRVDecompiler::EndPrimitive, |
|
|
|
|
|
|
|
&SPIRVDecompiler::InvocationId, |
|
|
|
&SPIRVDecompiler::YNegate, |
|
|
|
&SPIRVDecompiler::LocalInvocationId<0>, |
|
|
|
&SPIRVDecompiler::LocalInvocationId<1>, |
|
|
|
|
|
|
|
@ -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: |
|
|
|
|
|
|
|
@ -172,6 +172,7 @@ enum class OperationCode { |
|
|
|
EmitVertex, /// () -> void |
|
|
|
EndPrimitive, /// () -> void |
|
|
|
|
|
|
|
InvocationId, /// () -> int |
|
|
|
YNegate, /// () -> float |
|
|
|
LocalInvocationIdX, /// () -> uint |
|
|
|
LocalInvocationIdY, /// () -> uint |
|
|
|
|