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