xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/ProgramExecutableImpl.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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