Use Tint SingleEntryPoint transform in Vulkan/GL backends
Some Vulkan drivers don't handle multiple entrypoints well.
In addition, SPIRV-Cross translation can be wrong for
shader modules with multiple entrypoints. Always emit a single
SPIR-V entrypoint to workaround these issues.
This allows updating CopyTextureForBrowser to use a single
shader module, and it fixes some tests with multiple
entrypoints.
Fixed: dawn:948, dawn:959, dawn:1013
Change-Id: Ie129a32a54845316d11917331937ca44fba3d347
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/60640
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/dawn_native/opengl/PipelineGL.h b/src/dawn_native/opengl/PipelineGL.h
index 33e5341..e210606 100644
--- a/src/dawn_native/opengl/PipelineGL.h
+++ b/src/dawn_native/opengl/PipelineGL.h
@@ -37,10 +37,6 @@
PipelineGL();
~PipelineGL();
- void Initialize(const OpenGLFunctions& gl,
- const PipelineLayout* layout,
- const PerStage<ProgrammableStage>& stages);
-
// For each unit a sampler is bound to we need to know if we should use filtering or not
// because int and uint texture are only complete without filtering.
struct SamplerUnit {
@@ -53,6 +49,11 @@
void ApplyNow(const OpenGLFunctions& gl);
+ protected:
+ MaybeError InitializeBase(const OpenGLFunctions& gl,
+ const PipelineLayout* layout,
+ const PerStage<ProgrammableStage>& stages);
+
private:
GLuint mProgram;
std::vector<std::vector<SamplerUnit>> mUnitsForSamplers;