handle OpSRem
This commit is contained in:
parent
e792cd6160
commit
6b144cc609
44
shaders/asm/frag/srem.asm.frag
Normal file
44
shaders/asm/frag/srem.asm.frag
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
; SPIR-V
|
||||||
|
; Version: 1.0
|
||||||
|
; Generator: Khronos Glslang Reference Front End; 2
|
||||||
|
; Bound: 23
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
%1 = OpExtInstImport "GLSL.std.450"
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint Fragment %main "main" %FragColor %vA %vB
|
||||||
|
OpExecutionMode %main OriginUpperLeft
|
||||||
|
OpSource ESSL 310
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %FragColor "FragColor"
|
||||||
|
OpName %vA "vA"
|
||||||
|
OpName %vB "vB"
|
||||||
|
OpDecorate %FragColor RelaxedPrecision
|
||||||
|
OpDecorate %FragColor Location 0
|
||||||
|
OpDecorate %vA Flat
|
||||||
|
OpDecorate %vA Location 0
|
||||||
|
OpDecorate %vB Flat
|
||||||
|
OpDecorate %vB Location 1
|
||||||
|
OpDecorate %22 RelaxedPrecision
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%3 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||||
|
%FragColor = OpVariable %_ptr_Output_v4float Output
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%v4int = OpTypeVector %int 4
|
||||||
|
%_ptr_Input_v4int = OpTypePointer Input %v4int
|
||||||
|
%vA = OpVariable %_ptr_Input_v4int Input
|
||||||
|
%vB = OpVariable %_ptr_Input_v4int Input
|
||||||
|
%main = OpFunction %void None %3
|
||||||
|
%5 = OpLabel
|
||||||
|
%14 = OpLoad %v4int %vA
|
||||||
|
%16 = OpLoad %v4int %vB
|
||||||
|
%17 = OpLoad %v4int %vA
|
||||||
|
%18 = OpLoad %v4int %vB
|
||||||
|
%19 = OpSRem %v4int %17 %18
|
||||||
|
%20 = OpConvertSToF %v4float %19
|
||||||
|
OpStore %FragColor %20
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
@ -6665,8 +6665,22 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case OpSRem:
|
case OpSRem:
|
||||||
BOP_CAST(%, SPIRType::Int);
|
{
|
||||||
|
uint32_t result_type = ops[0];
|
||||||
|
uint32_t result_id = ops[1];
|
||||||
|
uint32_t op0 = ops[2];
|
||||||
|
uint32_t op1 = ops[3];
|
||||||
|
|
||||||
|
// Needs special handling.
|
||||||
|
bool forward = should_forward(op0) && should_forward(op1);
|
||||||
|
auto expr = join(to_enclosed_expression(op0), " - ", to_enclosed_expression(op1), " * ", "(",
|
||||||
|
to_enclosed_expression(op0), " / ", to_enclosed_expression(op1), ")");
|
||||||
|
|
||||||
|
emit_op(result_type, result_id, expr, forward);
|
||||||
|
inherit_expression_dependencies(result_id, op0);
|
||||||
|
inherit_expression_dependencies(result_id, op1);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case OpSDiv:
|
case OpSDiv:
|
||||||
BOP_CAST(/, SPIRType::Int);
|
BOP_CAST(/, SPIRType::Int);
|
||||||
|
Loading…
Reference in New Issue
Block a user