blob: 61ff61bb3f6ddf3268d89e02bf39be90de0f5fce [file] [log] [blame]
Geoff Langd08f3b32016-09-23 15:56:30 -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// ProgramNULL.h:
7// Defines the class interface for ProgramNULL, implementing ProgramImpl.
8//
9
10#ifndef LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_
11#define LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_
12
13#include "libANGLE/renderer/ProgramImpl.h"
14
15namespace rx
16{
17
18class ProgramNULL : public ProgramImpl
19{
20 public:
21 ProgramNULL(const gl::ProgramState &state);
22 ~ProgramNULL() override;
23
Jamie Madill9cf9e872017-06-05 12:59:25 -040024 gl::LinkResult load(const gl::Context *context,
25 gl::InfoLog &infoLog,
26 gl::BinaryInputStream *stream) override;
Jamie Madill27a60632017-06-30 15:12:01 -040027 void save(const gl::Context *context, gl::BinaryOutputStream *stream) override;
Geoff Langd08f3b32016-09-23 15:56:30 -040028 void setBinaryRetrievableHint(bool retrievable) override;
Yunchao He61afff12017-03-14 15:34:03 +080029 void setSeparable(bool separable) override;
Geoff Langd08f3b32016-09-23 15:56:30 -040030
Jamie Madill9cf9e872017-06-05 12:59:25 -040031 gl::LinkResult link(const gl::Context *context,
Jamie Madillc9727f32017-11-07 12:37:07 -050032 const gl::ProgramLinkedResources &resources,
Jamie Madill9cf9e872017-06-05 12:59:25 -040033 gl::InfoLog &infoLog) override;
Geoff Langd08f3b32016-09-23 15:56:30 -040034 GLboolean validate(const gl::Caps &caps, gl::InfoLog *infoLog) override;
35
36 void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) override;
37 void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) override;
38 void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) override;
39 void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) override;
40 void setUniform1iv(GLint location, GLsizei count, const GLint *v) override;
41 void setUniform2iv(GLint location, GLsizei count, const GLint *v) override;
42 void setUniform3iv(GLint location, GLsizei count, const GLint *v) override;
43 void setUniform4iv(GLint location, GLsizei count, const GLint *v) override;
44 void setUniform1uiv(GLint location, GLsizei count, const GLuint *v) override;
45 void setUniform2uiv(GLint location, GLsizei count, const GLuint *v) override;
46 void setUniform3uiv(GLint location, GLsizei count, const GLuint *v) override;
47 void setUniform4uiv(GLint location, GLsizei count, const GLuint *v) override;
48 void setUniformMatrix2fv(GLint location,
49 GLsizei count,
50 GLboolean transpose,
51 const GLfloat *value) override;
52 void setUniformMatrix3fv(GLint location,
53 GLsizei count,
54 GLboolean transpose,
55 const GLfloat *value) override;
56 void setUniformMatrix4fv(GLint location,
57 GLsizei count,
58 GLboolean transpose,
59 const GLfloat *value) override;
60 void setUniformMatrix2x3fv(GLint location,
61 GLsizei count,
62 GLboolean transpose,
63 const GLfloat *value) override;
64 void setUniformMatrix3x2fv(GLint location,
65 GLsizei count,
66 GLboolean transpose,
67 const GLfloat *value) override;
68 void setUniformMatrix2x4fv(GLint location,
69 GLsizei count,
70 GLboolean transpose,
71 const GLfloat *value) override;
72 void setUniformMatrix4x2fv(GLint location,
73 GLsizei count,
74 GLboolean transpose,
75 const GLfloat *value) override;
76 void setUniformMatrix3x4fv(GLint location,
77 GLsizei count,
78 GLboolean transpose,
79 const GLfloat *value) override;
80 void setUniformMatrix4x3fv(GLint location,
81 GLsizei count,
82 GLboolean transpose,
83 const GLfloat *value) override;
84
Jamie Madill54164b02017-08-28 15:17:37 -040085 void getUniformfv(const gl::Context *context, GLint location, GLfloat *params) const override;
86 void getUniformiv(const gl::Context *context, GLint location, GLint *params) const override;
87 void getUniformuiv(const gl::Context *context, GLint location, GLuint *params) const override;
88
Geoff Langd08f3b32016-09-23 15:56:30 -040089 // TODO: synchronize in syncState when dirty bits exist.
90 void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override;
91
92 // May only be called after a successful link operation.
93 // Return false for inactive blocks.
Olli Etuaho855d9642017-05-17 14:05:06 +030094 bool getUniformBlockSize(const std::string &blockName,
95 const std::string &blockMappedName,
96 size_t *sizeOut) const override;
Geoff Langd08f3b32016-09-23 15:56:30 -040097
98 // May only be called after a successful link operation.
99 // Returns false for inactive members.
100 bool getUniformBlockMemberInfo(const std::string &memberUniformName,
Olli Etuaho855d9642017-05-17 14:05:06 +0300101 const std::string &memberUniformMappedName,
Geoff Langd08f3b32016-09-23 15:56:30 -0400102 sh::BlockMemberInfo *memberInfoOut) const override;
103 // CHROMIUM_path_rendering
104 // Set parameters to control fragment shader input variable interpolation
105 void setPathFragmentInputGen(const std::string &inputName,
106 GLenum genMode,
107 GLint components,
108 const GLfloat *coeffs) override;
109};
110
111} // namespace rx
112
113#endif // LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_