|
|
|
@ -69,10 +69,10 @@ public:
|
|
|
|
|
shader_source += '\n';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string GenerateTemporal() {
|
|
|
|
|
std::string temporal = "tmp";
|
|
|
|
|
temporal += std::to_string(temporal_index++);
|
|
|
|
|
return temporal;
|
|
|
|
|
std::string GenerateTemporary() {
|
|
|
|
|
std::string temporary = "tmp";
|
|
|
|
|
temporary += std::to_string(temporary_index++);
|
|
|
|
|
return temporary;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string GetResult() {
|
|
|
|
@ -87,7 +87,7 @@ private:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string shader_source;
|
|
|
|
|
u32 temporal_index = 1;
|
|
|
|
|
u32 temporary_index = 1;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// Generates code to use for a swizzle operation.
|
|
|
|
@ -540,7 +540,7 @@ private:
|
|
|
|
|
|
|
|
|
|
} else if (std::holds_alternative<OperationNode>(*offset)) {
|
|
|
|
|
// Indirect access
|
|
|
|
|
const std::string final_offset = code.GenerateTemporal();
|
|
|
|
|
const std::string final_offset = code.GenerateTemporary();
|
|
|
|
|
code.AddLine("uint " + final_offset + " = (ftou(" + Visit(offset) + ") / 4) & " +
|
|
|
|
|
std::to_string(MAX_CONSTBUFFER_ELEMENTS - 1) + ';');
|
|
|
|
|
return fmt::format("{}[{} / 4][{} % 4]", GetConstBuffer(cbuf->GetIndex()),
|
|
|
|
@ -587,9 +587,9 @@ private:
|
|
|
|
|
// There's a bug in NVidia's proprietary drivers that makes precise fail on fragment shaders
|
|
|
|
|
const std::string precise = stage != ShaderStage::Fragment ? "precise " : "";
|
|
|
|
|
|
|
|
|
|
const std::string temporal = code.GenerateTemporal();
|
|
|
|
|
code.AddLine(precise + "float " + temporal + " = " + value + ';');
|
|
|
|
|
return temporal;
|
|
|
|
|
const std::string temporary = code.GenerateTemporary();
|
|
|
|
|
code.AddLine(precise + "float " + temporary + " = " + value + ';');
|
|
|
|
|
return temporary;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string VisitOperand(Operation operation, std::size_t operand_index) {
|
|
|
|
@ -601,9 +601,9 @@ private:
|
|
|
|
|
return Visit(operand);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const std::string temporal = code.GenerateTemporal();
|
|
|
|
|
code.AddLine("float " + temporal + " = " + Visit(operand) + ';');
|
|
|
|
|
return temporal;
|
|
|
|
|
const std::string temporary = code.GenerateTemporary();
|
|
|
|
|
code.AddLine("float " + temporary + " = " + Visit(operand) + ';');
|
|
|
|
|
return temporary;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string VisitOperand(Operation operation, std::size_t operand_index, Type type) {
|
|
|
|
|