forked from suyu/suyu
shader_ir/other: Implement S2R InvocationId
This commit is contained in:
parent
ecbfa416f0
commit
0b5b93053d
4 changed files with 9 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue