1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2023 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // ProgramExecutableImpl.h: Defines the abstract rx::ProgramExecutableImpl class. 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_PROGRAMEXECUTABLEIMPL_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_PROGRAMEXECUTABLEIMPL_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker namespace gl 15*8975f5c5SAndroid Build Coastguard Worker { 16*8975f5c5SAndroid Build Coastguard Worker class Context; 17*8975f5c5SAndroid Build Coastguard Worker class ProgramExecutable; 18*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker namespace rx 21*8975f5c5SAndroid Build Coastguard Worker { 22*8975f5c5SAndroid Build Coastguard Worker // ProgramExecutable holds the result of link. The backend ProgramExecutable* classes similarly 23*8975f5c5SAndroid Build Coastguard Worker // hold additonaly backend-specific link results. A program's executable is changed on successful 24*8975f5c5SAndroid Build Coastguard Worker // link. This allows the program to continue to work with its existing executable despite a failed 25*8975f5c5SAndroid Build Coastguard Worker // relink. 26*8975f5c5SAndroid Build Coastguard Worker class ProgramExecutableImpl : angle::NonCopyable 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker public: ProgramExecutableImpl(const gl::ProgramExecutable * executable)29*8975f5c5SAndroid Build Coastguard Worker ProgramExecutableImpl(const gl::ProgramExecutable *executable) : mExecutable(executable) {} ~ProgramExecutableImpl()30*8975f5c5SAndroid Build Coastguard Worker virtual ~ProgramExecutableImpl() {} 31*8975f5c5SAndroid Build Coastguard Worker destroy(const gl::Context * context)32*8975f5c5SAndroid Build Coastguard Worker virtual void destroy(const gl::Context *context) {} 33*8975f5c5SAndroid Build Coastguard Worker 34*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) = 0; 35*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) = 0; 36*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) = 0; 37*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) = 0; 38*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform1iv(GLint location, GLsizei count, const GLint *v) = 0; 39*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform2iv(GLint location, GLsizei count, const GLint *v) = 0; 40*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform3iv(GLint location, GLsizei count, const GLint *v) = 0; 41*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform4iv(GLint location, GLsizei count, const GLint *v) = 0; 42*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform1uiv(GLint location, GLsizei count, const GLuint *v) = 0; 43*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform2uiv(GLint location, GLsizei count, const GLuint *v) = 0; 44*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform3uiv(GLint location, GLsizei count, const GLuint *v) = 0; 45*8975f5c5SAndroid Build Coastguard Worker virtual void setUniform4uiv(GLint location, GLsizei count, const GLuint *v) = 0; 46*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix2fv(GLint location, 47*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 48*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 49*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 50*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix3fv(GLint location, 51*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 52*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 53*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 54*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix4fv(GLint location, 55*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 56*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 57*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 58*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix2x3fv(GLint location, 59*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 60*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 61*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 62*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix3x2fv(GLint location, 63*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 64*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 65*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 66*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix2x4fv(GLint location, 67*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 68*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 69*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 70*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix4x2fv(GLint location, 71*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 72*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 73*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 74*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix3x4fv(GLint location, 75*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 76*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 77*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 78*8975f5c5SAndroid Build Coastguard Worker virtual void setUniformMatrix4x3fv(GLint location, 79*8975f5c5SAndroid Build Coastguard Worker GLsizei count, 80*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 81*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value) = 0; 82*8975f5c5SAndroid Build Coastguard Worker 83*8975f5c5SAndroid Build Coastguard Worker // Done in the back-end to avoid having to keep a system copy of uniform data. 84*8975f5c5SAndroid Build Coastguard Worker virtual void getUniformfv(const gl::Context *context, 85*8975f5c5SAndroid Build Coastguard Worker GLint location, 86*8975f5c5SAndroid Build Coastguard Worker GLfloat *params) const = 0; 87*8975f5c5SAndroid Build Coastguard Worker virtual void getUniformiv(const gl::Context *context, GLint location, GLint *params) const = 0; 88*8975f5c5SAndroid Build Coastguard Worker virtual void getUniformuiv(const gl::Context *context, 89*8975f5c5SAndroid Build Coastguard Worker GLint location, 90*8975f5c5SAndroid Build Coastguard Worker GLuint *params) const = 0; 91*8975f5c5SAndroid Build Coastguard Worker // Optional. Implement in backends that fill |postLinkSubTasksOut| in |LinkTask|. waitForPostLinkTasks(const gl::Context * context)92*8975f5c5SAndroid Build Coastguard Worker virtual void waitForPostLinkTasks(const gl::Context *context) { UNIMPLEMENTED(); } getExecutable()93*8975f5c5SAndroid Build Coastguard Worker const gl::ProgramExecutable *getExecutable() const { return mExecutable; } 94*8975f5c5SAndroid Build Coastguard Worker 95*8975f5c5SAndroid Build Coastguard Worker protected: 96*8975f5c5SAndroid Build Coastguard Worker const gl::ProgramExecutable *mExecutable; 97*8975f5c5SAndroid Build Coastguard Worker }; 98*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 99*8975f5c5SAndroid Build Coastguard Worker 100*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_PROGRAMEXECUTABLEIMPL_H_ 101