blob: 5899cf3d3d60637f64abfc422ca99518122f0de1 [file] [log] [blame]
Jamie Madill9e54b5a2016-05-25 12:57:39 -04001//
2// Copyright 2016 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// ProgramVk.h:
7// Defines the class interface for ProgramVk, implementing ProgramImpl.
8//
9
10#ifndef LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_
11#define LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_
12
13#include "libANGLE/renderer/ProgramImpl.h"
14
15namespace rx
16{
17
18class ProgramVk : public ProgramImpl
19{
20 public:
21 ProgramVk(const gl::ProgramState &state);
22 ~ProgramVk() override;
23
Jamie Madilla7d12dc2016-12-13 15:08:19 -050024 LinkResult load(const ContextImpl *contextImpl,
25 gl::InfoLog &infoLog,
26 gl::BinaryInputStream *stream) override;
Jamie Madill9e54b5a2016-05-25 12:57:39 -040027 gl::Error save(gl::BinaryOutputStream *stream) override;
28 void setBinaryRetrievableHint(bool retrievable) override;
29
30 LinkResult link(const gl::ContextState &data, gl::InfoLog &infoLog) override;
31 GLboolean validate(const gl::Caps &caps, gl::InfoLog *infoLog) override;
32
33 void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) override;
34 void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) override;
35 void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) override;
36 void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) override;
37 void setUniform1iv(GLint location, GLsizei count, const GLint *v) override;
38 void setUniform2iv(GLint location, GLsizei count, const GLint *v) override;
39 void setUniform3iv(GLint location, GLsizei count, const GLint *v) override;
40 void setUniform4iv(GLint location, GLsizei count, const GLint *v) override;
41 void setUniform1uiv(GLint location, GLsizei count, const GLuint *v) override;
42 void setUniform2uiv(GLint location, GLsizei count, const GLuint *v) override;
43 void setUniform3uiv(GLint location, GLsizei count, const GLuint *v) override;
44 void setUniform4uiv(GLint location, GLsizei count, const GLuint *v) override;
45 void setUniformMatrix2fv(GLint location,
46 GLsizei count,
47 GLboolean transpose,
48 const GLfloat *value) override;
49 void setUniformMatrix3fv(GLint location,
50 GLsizei count,
51 GLboolean transpose,
52 const GLfloat *value) override;
53 void setUniformMatrix4fv(GLint location,
54 GLsizei count,
55 GLboolean transpose,
56 const GLfloat *value) override;
57 void setUniformMatrix2x3fv(GLint location,
58 GLsizei count,
59 GLboolean transpose,
60 const GLfloat *value) override;
61 void setUniformMatrix3x2fv(GLint location,
62 GLsizei count,
63 GLboolean transpose,
64 const GLfloat *value) override;
65 void setUniformMatrix2x4fv(GLint location,
66 GLsizei count,
67 GLboolean transpose,
68 const GLfloat *value) override;
69 void setUniformMatrix4x2fv(GLint location,
70 GLsizei count,
71 GLboolean transpose,
72 const GLfloat *value) override;
73 void setUniformMatrix3x4fv(GLint location,
74 GLsizei count,
75 GLboolean transpose,
76 const GLfloat *value) override;
77 void setUniformMatrix4x3fv(GLint location,
78 GLsizei count,
79 GLboolean transpose,
80 const GLfloat *value) override;
81
82 // TODO: synchronize in syncState when dirty bits exist.
83 void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override;
84
85 // May only be called after a successful link operation.
86 // Return false for inactive blocks.
87 bool getUniformBlockSize(const std::string &blockName, size_t *sizeOut) const override;
88
89 // May only be called after a successful link operation.
90 // Returns false for inactive members.
91 bool getUniformBlockMemberInfo(const std::string &memberUniformName,
92 sh::BlockMemberInfo *memberInfoOut) const override;
Sami Väisänen46eaa942016-06-29 10:26:37 +030093
94 void setPathFragmentInputGen(const std::string &inputName,
95 GLenum genMode,
96 GLint components,
97 const GLfloat *coeffs) override;
Jamie Madill9e54b5a2016-05-25 12:57:39 -040098};
99
100} // namespace rx
101
102#endif // LIBANGLE_RENDERER_VULKAN_PROGRAMVK_H_