summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h66
1 files changed, 44 insertions, 22 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h b/src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h
index 1e688045a1..2371b2759c 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h
+++ b/src/3rdparty/angle/src/libANGLE/renderer/ProgramImpl.h
@@ -14,32 +14,39 @@
#include "libANGLE/Constants.h"
#include "libANGLE/Program.h"
#include "libANGLE/Shader.h"
-#include "libANGLE/renderer/Renderer.h"
#include <map>
-namespace rx
+namespace gl
{
+class Context;
+struct ProgramLinkedResources;
+}
-struct LinkResult
+namespace sh
{
- LinkResult(bool linkSuccess, const gl::Error &error) : linkSuccess(linkSuccess), error(error) {}
-
- bool linkSuccess;
- gl::Error error;
-};
+struct BlockMemberInfo;
+}
+namespace rx
+{
class ProgramImpl : angle::NonCopyable
{
public:
- ProgramImpl(const gl::Program::Data &data) : mData(data) {}
+ ProgramImpl(const gl::ProgramState &state) : mState(state) {}
virtual ~ProgramImpl() {}
+ virtual void destroy(const gl::Context *context) {}
- virtual LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) = 0;
- virtual gl::Error save(gl::BinaryOutputStream *stream) = 0;
+ virtual gl::LinkResult load(const gl::Context *context,
+ gl::InfoLog &infoLog,
+ gl::BinaryInputStream *stream) = 0;
+ virtual void save(const gl::Context *context, gl::BinaryOutputStream *stream) = 0;
virtual void setBinaryRetrievableHint(bool retrievable) = 0;
+ virtual void setSeparable(bool separable) = 0;
- virtual LinkResult link(const gl::Data &data, gl::InfoLog &infoLog) = 0;
+ virtual gl::LinkResult link(const gl::Context *context,
+ const gl::ProgramLinkedResources &resources,
+ gl::InfoLog &infoLog) = 0;
virtual GLboolean validate(const gl::Caps &caps, gl::InfoLog *infoLog) = 0;
virtual void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) = 0;
@@ -64,22 +71,37 @@ class ProgramImpl : angle::NonCopyable
virtual void setUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) = 0;
virtual void setUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) = 0;
+ // Done in the back-end to avoid having to keep a system copy of uniform data.
+ virtual void getUniformfv(const gl::Context *context,
+ GLint location,
+ GLfloat *params) const = 0;
+ virtual void getUniformiv(const gl::Context *context, GLint location, GLint *params) const = 0;
+ virtual void getUniformuiv(const gl::Context *context,
+ GLint location,
+ GLuint *params) const = 0;
+
// TODO: synchronize in syncState when dirty bits exist.
virtual void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) = 0;
- // May only be called after a successful link operation.
- // Return false for inactive blocks.
- virtual bool getUniformBlockSize(const std::string &blockName, size_t *sizeOut) const = 0;
-
- // May only be called after a successful link operation.
- // Returns false for inactive members.
- virtual bool getUniformBlockMemberInfo(const std::string &memberUniformName,
- sh::BlockMemberInfo *memberInfoOut) const = 0;
+ // CHROMIUM_path_rendering
+ // Set parameters to control fragment shader input variable interpolation
+ virtual void setPathFragmentInputGen(const std::string &inputName,
+ GLenum genMode,
+ GLint components,
+ const GLfloat *coeffs) = 0;
+
+ // Implementation-specific method for ignoring unreferenced uniforms. Some implementations may
+ // perform more extensive analysis and ignore some locations that ANGLE doesn't detect as
+ // unreferenced. This method is not required to be overriden by a back-end.
+ virtual void markUnusedUniformLocations(std::vector<gl::VariableLocation> *uniformLocations,
+ std::vector<gl::SamplerBinding> *samplerBindings)
+ {
+ }
protected:
- const gl::Program::Data &mData;
+ const gl::ProgramState &mState;
};
-}
+} // namespace rx
#endif // LIBANGLE_RENDERER_PROGRAMIMPL_H_