Output code for OpFMod in HLSL when required
This commit is contained in:
Родитель
8e9bf1f7af
Коммит
1a48d7d4fc
|
@ -138,7 +138,10 @@ void CompilerHLSL::emit_header()
|
||||||
for (auto &header : header_lines)
|
for (auto &header : header_lines)
|
||||||
statement(header);
|
statement(header);
|
||||||
|
|
||||||
statement("");
|
if (header_lines.size() > 0)
|
||||||
|
{
|
||||||
|
statement("");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerHLSL::emit_interface_block_globally(const SPIRVariable &var)
|
void CompilerHLSL::emit_interface_block_globally(const SPIRVariable &var)
|
||||||
|
@ -295,7 +298,6 @@ void CompilerHLSL::emit_resources()
|
||||||
for (auto var : variables)
|
for (auto var : variables)
|
||||||
{
|
{
|
||||||
emit_interface_block_in_struct(*var, binding_number);
|
emit_interface_block_in_struct(*var, binding_number);
|
||||||
emitted = true;
|
|
||||||
}
|
}
|
||||||
end_scope_decl();
|
end_scope_decl();
|
||||||
statement("");
|
statement("");
|
||||||
|
@ -329,7 +331,6 @@ void CompilerHLSL::emit_resources()
|
||||||
for (auto var : variables)
|
for (auto var : variables)
|
||||||
{
|
{
|
||||||
emit_interface_block_in_struct(*var, binding_number);
|
emit_interface_block_in_struct(*var, binding_number);
|
||||||
emitted = true;
|
|
||||||
}
|
}
|
||||||
end_scope_decl();
|
end_scope_decl();
|
||||||
statement("");
|
statement("");
|
||||||
|
@ -348,6 +349,15 @@ void CompilerHLSL::emit_resources()
|
||||||
|
|
||||||
if (emitted)
|
if (emitted)
|
||||||
statement("");
|
statement("");
|
||||||
|
|
||||||
|
if (requires_op_fmod)
|
||||||
|
{
|
||||||
|
statement("float mod(float x, float y)");
|
||||||
|
begin_scope();
|
||||||
|
statement("return x - y * floor(x / y);");
|
||||||
|
end_scope();
|
||||||
|
statement("");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerHLSL::emit_function_prototype(SPIRFunction &func, uint64_t return_flags)
|
void CompilerHLSL::emit_function_prototype(SPIRFunction &func, uint64_t return_flags)
|
||||||
|
@ -845,6 +855,12 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction)
|
||||||
emit_binary_func_op_transpose_all(ops[0], ops[1], ops[2], ops[3], "mul");
|
emit_binary_func_op_transpose_all(ops[0], ops[1], ops[2], ops[3], "mul");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OpFMod:
|
||||||
|
{
|
||||||
|
requires_op_fmod = true;
|
||||||
|
CompilerGLSL::emit_instruction(instruction);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
CompilerGLSL::emit_instruction(instruction);
|
CompilerGLSL::emit_instruction(instruction);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -67,6 +67,7 @@ private:
|
||||||
void emit_glsl_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, uint32_t count) override;
|
void emit_glsl_op(uint32_t result_type, uint32_t result_id, uint32_t op, const uint32_t *args, uint32_t count) override;
|
||||||
|
|
||||||
Options options;
|
Options options;
|
||||||
|
bool requires_op_fmod = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче