Support swizzled out-params in SPIR-V intrinsic calls.
The code in writeFunctionCall which supported swizzled out-params has
been factored out into a pair of helper functions. The code for emitting
intrinsics now relies on these helpers when emitting out-params.
Change-Id: I4436185ae107d70b529e7e1ea0dd89f844c6a673
Bug: skia:11052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/446719
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/codegen/SkSLSPIRVCodeGenerator.h b/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
index 55bdc74..5c08c82 100644
--- a/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
+++ b/src/sksl/codegen/SkSLSPIRVCodeGenerator.h
@@ -172,6 +172,12 @@
kRelaxed,
};
+ struct TempVar {
+ SpvId spvId;
+ const Type* type;
+ std::unique_ptr<SPIRVCodeGenerator::LValue> lvalue;
+ };
+
void setupIntrinsics();
/**
@@ -229,6 +235,13 @@
SpvId writeIntrinsicCall(const FunctionCall& c, OutputStream& out);
+ SpvId writeFunctionCallArgument(const Expression& arg,
+ const Modifiers& paramModifiers,
+ std::vector<TempVar>* tempVars,
+ OutputStream& out);
+
+ void copyBackTempVars(const std::vector<TempVar>& tempVars, OutputStream& out);
+
SpvId writeFunctionCall(const FunctionCall& c, OutputStream& out);