• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2024 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // ProgramExecutableWgpu.h: Implementation of ProgramExecutableImpl.
8 
9 #ifndef LIBANGLE_RENDERER_WGPU_PROGRAMEXECUTABLEWGPU_H_
10 #define LIBANGLE_RENDERER_WGPU_PROGRAMEXECUTABLEWGPU_H_
11 
12 #include "libANGLE/ProgramExecutable.h"
13 #include "libANGLE/renderer/ProgramExecutableImpl.h"
14 
15 #include <dawn/webgpu_cpp.h>
16 
17 struct TranslatedWGPUShaderModule
18 {
19     wgpu::ShaderModule module;
20 };
21 
22 namespace rx
23 {
24 class ProgramExecutableWgpu : public ProgramExecutableImpl
25 {
26   public:
27     ProgramExecutableWgpu(const gl::ProgramExecutable *executable);
28     ~ProgramExecutableWgpu() override;
29 
30     void destroy(const gl::Context *context) override;
31 
32     void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) override;
33     void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) override;
34     void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) override;
35     void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) override;
36     void setUniform1iv(GLint location, GLsizei count, const GLint *v) override;
37     void setUniform2iv(GLint location, GLsizei count, const GLint *v) override;
38     void setUniform3iv(GLint location, GLsizei count, const GLint *v) override;
39     void setUniform4iv(GLint location, GLsizei count, const GLint *v) override;
40     void setUniform1uiv(GLint location, GLsizei count, const GLuint *v) override;
41     void setUniform2uiv(GLint location, GLsizei count, const GLuint *v) override;
42     void setUniform3uiv(GLint location, GLsizei count, const GLuint *v) override;
43     void setUniform4uiv(GLint location, GLsizei count, const GLuint *v) override;
44     void setUniformMatrix2fv(GLint location,
45                              GLsizei count,
46                              GLboolean transpose,
47                              const GLfloat *value) override;
48     void setUniformMatrix3fv(GLint location,
49                              GLsizei count,
50                              GLboolean transpose,
51                              const GLfloat *value) override;
52     void setUniformMatrix4fv(GLint location,
53                              GLsizei count,
54                              GLboolean transpose,
55                              const GLfloat *value) override;
56     void setUniformMatrix2x3fv(GLint location,
57                                GLsizei count,
58                                GLboolean transpose,
59                                const GLfloat *value) override;
60     void setUniformMatrix3x2fv(GLint location,
61                                GLsizei count,
62                                GLboolean transpose,
63                                const GLfloat *value) override;
64     void setUniformMatrix2x4fv(GLint location,
65                                GLsizei count,
66                                GLboolean transpose,
67                                const GLfloat *value) override;
68     void setUniformMatrix4x2fv(GLint location,
69                                GLsizei count,
70                                GLboolean transpose,
71                                const GLfloat *value) override;
72     void setUniformMatrix3x4fv(GLint location,
73                                GLsizei count,
74                                GLboolean transpose,
75                                const GLfloat *value) override;
76     void setUniformMatrix4x3fv(GLint location,
77                                GLsizei count,
78                                GLboolean transpose,
79                                const GLfloat *value) override;
80 
81     void getUniformfv(const gl::Context *context, GLint location, GLfloat *params) const override;
82     void getUniformiv(const gl::Context *context, GLint location, GLint *params) const override;
83     void getUniformuiv(const gl::Context *context, GLint location, GLuint *params) const override;
84 
85     TranslatedWGPUShaderModule &getShaderModule(gl::ShaderType type);
86 
87   private:
88     gl::ShaderMap<TranslatedWGPUShaderModule> mShaderModules;
89 };
90 
91 }  // namespace rx
92 
93 #endif  // LIBANGLE_RENDERER_WGPU_PROGRAMEXECUTABLEWGPU_H_
94