diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-07-24 19:48:25 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-07-24 19:48:25 +0200 |
commit | dd234f025a2154553de23d4514da6669ef8f2851 (patch) | |
tree | 2ffe44a43e84debe71029baf84296037b28e61fe /gfx/angle | |
parent | a81919b573eec06e399403a9e0e390a0e330f4b8 (diff) | |
download | uxp-dd234f025a2154553de23d4514da6669ef8f2851.tar.gz |
ANGLE: Initialize uniform blocks before detaching shaders
This resolves #668
Diffstat (limited to 'gfx/angle')
-rwxr-xr-x | gfx/angle/src/libANGLE/Program.cpp | 6 | ||||
-rwxr-xr-x | gfx/angle/src/libANGLE/renderer/ProgramImpl.h | 4 | ||||
-rwxr-xr-x | gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h | 2 |
3 files changed, 11 insertions, 1 deletions
diff --git a/gfx/angle/src/libANGLE/Program.cpp b/gfx/angle/src/libANGLE/Program.cpp index 7f4226da17..49a0f9a335 100755 --- a/gfx/angle/src/libANGLE/Program.cpp +++ b/gfx/angle/src/libANGLE/Program.cpp @@ -679,6 +679,12 @@ Error Program::link(const ContextState &data) gatherInterfaceBlockInfo(); + // Because we do lazy init in assignUniformBlockRegisters, + // we must initialize them when linking shaders, + // otherwise, we will have no shaders for getting uniform blocks + // information from shaders when doing draw calls. + mProgram->assignUniformBlockRegisters(); + mLinked = true; return NoError(); } diff --git a/gfx/angle/src/libANGLE/renderer/ProgramImpl.h b/gfx/angle/src/libANGLE/renderer/ProgramImpl.h index 45ff0a05a1..e62623a8da 100755 --- a/gfx/angle/src/libANGLE/renderer/ProgramImpl.h +++ b/gfx/angle/src/libANGLE/renderer/ProgramImpl.h @@ -86,6 +86,10 @@ class ProgramImpl : angle::NonCopyable GLint components, const GLfloat *coeffs) = 0; + virtual void assignUniformBlockRegisters() + { + } + protected: const gl::ProgramState &mState; }; diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h index 88fe4020db..01f3973c56 100755 --- a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h +++ b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h @@ -231,6 +231,7 @@ class ProgramD3D : public ProgramImpl const GLfloat *value); void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override; + void assignUniformBlockRegisters() override; const UniformStorageD3D &getVertexUniformStorage() const { return *mVertexUniformStorage; } const UniformStorageD3D &getFragmentUniformStorage() const { return *mFragmentUniformStorage; } @@ -350,7 +351,6 @@ class ProgramD3D : public ProgramImpl void initAttribLocationsToD3DSemantic(); void reset(); - void assignUniformBlockRegisters(); void initUniformBlockInfo(); size_t getUniformBlockInfo(const sh::InterfaceBlock &interfaceBlock); |