Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | List of all members
GrGLProgramDataManager Class Reference

#include <GrGLProgramDataManager.h>

Inheritance diagram for GrGLProgramDataManager:
GrGLSLProgramDataManager

Classes

struct  GLUniformInfo
 
struct  VaryingInfo
 

Public Types

typedef SkTBlockList< GLUniformInfoUniformInfoArray
 
typedef SkTBlockList< VaryingInfoVaryingInfoArray
 
- Public Types inherited from GrGLSLProgramDataManager
enum class  Specialized : bool { kNo = false , kYes = true }
 

Public Member Functions

 GrGLProgramDataManager (GrGLGpu *, const UniformInfoArray &)
 
void setSamplerUniforms (const UniformInfoArray &samplers, int startUnit) const
 
void set1i (UniformHandle, int32_t) const override
 
void set1iv (UniformHandle, int arrayCount, const int32_t v[]) const override
 
void set1f (UniformHandle, float v0) const override
 
void set1fv (UniformHandle, int arrayCount, const float v[]) const override
 
void set2i (UniformHandle, int32_t, int32_t) const override
 
void set2iv (UniformHandle, int arrayCount, const int32_t v[]) const override
 
void set2f (UniformHandle, float, float) const override
 
void set2fv (UniformHandle, int arrayCount, const float v[]) const override
 
void set3i (UniformHandle, int32_t, int32_t, int32_t) const override
 
void set3iv (UniformHandle, int arrayCount, const int32_t v[]) const override
 
void set3f (UniformHandle, float, float, float) const override
 
void set3fv (UniformHandle, int arrayCount, const float v[]) const override
 
void set4i (UniformHandle, int32_t, int32_t, int32_t, int32_t) const override
 
void set4iv (UniformHandle, int arrayCount, const int32_t v[]) const override
 
void set4f (UniformHandle, float, float, float, float) const override
 
void set4fv (UniformHandle, int arrayCount, const float v[]) const override
 
void setMatrix2f (UniformHandle, const float matrix[]) const override
 
void setMatrix3f (UniformHandle, const float matrix[]) const override
 
void setMatrix4f (UniformHandle, const float matrix[]) const override
 
void setMatrix2fv (UniformHandle, int arrayCount, const float matrices[]) const override
 
void setMatrix3fv (UniformHandle, int arrayCount, const float matrices[]) const override
 
void setMatrix4fv (UniformHandle, int arrayCount, const float matrices[]) const override
 
- Public Member Functions inherited from GrGLSLProgramDataManager
virtual ~GrGLSLProgramDataManager ()
 
virtual void set1iv (UniformHandle, int arrayCount, const int v[]) const =0
 
virtual void set2iv (UniformHandle, int arrayCount, const int v[]) const =0
 
virtual void set3iv (UniformHandle, int arrayCount, const int v[]) const =0
 
virtual void set4iv (UniformHandle, int arrayCount, const int v[]) const =0
 
void setSkMatrix (UniformHandle, const SkMatrix &) const
 
void setSkM44 (UniformHandle, const SkM44 &) const
 
void setRuntimeEffectUniforms (SkSpan< const SkRuntimeEffect::Uniform >, SkSpan< const UniformHandle >, SkSpan< const Specialized >, const void *src) const
 
void setRuntimeEffectUniforms (SkSpan< const SkRuntimeEffect::Uniform > uniforms, SkSpan< const UniformHandle > handles, const void *src) const
 

Additional Inherited Members

- Protected Member Functions inherited from GrGLSLProgramDataManager
 GrGLSLProgramDataManager ()
 

Detailed Description

Manages the resources used by a shader program. The resources are objects the program uses to communicate with the application code.

Definition at line 27 of file GrGLProgramDataManager.h.

Member Typedef Documentation

◆ UniformInfoArray

Definition at line 41 of file GrGLProgramDataManager.h.

◆ VaryingInfoArray

Definition at line 42 of file GrGLProgramDataManager.h.

Constructor & Destructor Documentation

◆ GrGLProgramDataManager()

GrGLProgramDataManager::GrGLProgramDataManager ( GrGLGpu gpu,
const UniformInfoArray uniforms 
)

Definition at line 17 of file GrGLProgramDataManager.cpp.

18 : fGpu(gpu) {
19 fUniforms.push_back_n(uniforms.count());
20 int i = 0;
21 for (const GLUniformInfo& builderUniform : uniforms.items()) {
22 Uniform& uniform = fUniforms[i++];
23 SkASSERT(GrShaderVar::kNonArray == builderUniform.fVariable.getArrayCount() ||
24 builderUniform.fVariable.getArrayCount() > 0);
26 uniform.fArrayCount = builderUniform.fVariable.getArrayCount();
27 uniform.fType = builderUniform.fVariable.getType();
28 )
29 uniform.fLocation = builderUniform.fLocation;
30 }
31}
#define SkASSERT(cond)
Definition SkAssert.h:116
#define SkDEBUGCODE(...)
Definition SkDebug.h:23
T * push_back_n(int n)
Definition SkTArray.h:262

Member Function Documentation

◆ set1f()

void GrGLProgramDataManager::set1f ( UniformHandle  u,
float  v0 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 66 of file GrGLProgramDataManager.cpp.

66 {
67 const Uniform& uni = fUniforms[u.toIndex()];
68 SkASSERT(uni.fType == SkSLType::kFloat || uni.fType == SkSLType::kHalf);
69 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
70 if (kUnusedUniform != uni.fLocation) {
71 GR_GL_CALL(fGpu->glInterface(), Uniform1f(uni.fLocation, v0));
72 }
73}
#define GR_GL_CALL(IFACE, X)
Definition GrGLUtil.h:381
const GrGLInterface * glInterface() const
Definition GrGLGpu.h:103

◆ set1fv()

void GrGLProgramDataManager::set1fv ( UniformHandle  u,
int  arrayCount,
const float  v[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 75 of file GrGLProgramDataManager.cpp.

77 {
78 const Uniform& uni = fUniforms[u.toIndex()];
79 SkASSERT(uni.fType == SkSLType::kFloat || uni.fType == SkSLType::kHalf);
80 SkASSERT(arrayCount > 0);
81 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
82 // This assert fires in some instances of the two-pt gradient for its VSParams.
83 // Once the uniform manager is responsible for inserting the duplicate uniform
84 // arrays in VS and FS driver bug workaround, this can be enabled.
85 // this->printUni(uni);
86 if (kUnusedUniform != uni.fLocation) {
87 GR_GL_CALL(fGpu->glInterface(), Uniform1fv(uni.fLocation, arrayCount, v));
88 }
89}
#define ASSERT_ARRAY_UPLOAD_IN_BOUNDS(UNI, COUNT)

◆ set1i()

void GrGLProgramDataManager::set1i ( UniformHandle  u,
int32_t  i 
) const
overridevirtual

Functions for uploading uniform values. The varities ending in v can be used to upload to an array of uniforms. arrayCount must be <= the array count of the uniform.

Implements GrGLSLProgramDataManager.

Definition at line 45 of file GrGLProgramDataManager.cpp.

45 {
46 const Uniform& uni = fUniforms[u.toIndex()];
47 SkASSERT(uni.fType == SkSLType::kInt || uni.fType == SkSLType::kShort);
48 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
49 if (kUnusedUniform != uni.fLocation) {
50 GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fLocation, i));
51 }
52}

◆ set1iv()

void GrGLProgramDataManager::set1iv ( UniformHandle  u,
int  arrayCount,
const int32_t  v[] 
) const
override

Definition at line 54 of file GrGLProgramDataManager.cpp.

56 {
57 const Uniform& uni = fUniforms[u.toIndex()];
58 SkASSERT(uni.fType == SkSLType::kInt || uni.fType == SkSLType::kShort);
59 SkASSERT(arrayCount > 0);
60 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
61 if (kUnusedUniform != uni.fLocation) {
62 GR_GL_CALL(fGpu->glInterface(), Uniform1iv(uni.fLocation, arrayCount, v));
63 }
64}

◆ set2f()

void GrGLProgramDataManager::set2f ( UniformHandle  u,
float  v0,
float  v1 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 112 of file GrGLProgramDataManager.cpp.

112 {
113 const Uniform& uni = fUniforms[u.toIndex()];
114 SkASSERT(uni.fType == SkSLType::kFloat2 || uni.fType == SkSLType::kHalf2);
115 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
116 if (kUnusedUniform != uni.fLocation) {
117 GR_GL_CALL(fGpu->glInterface(), Uniform2f(uni.fLocation, v0, v1));
118 }
119}

◆ set2fv()

void GrGLProgramDataManager::set2fv ( UniformHandle  u,
int  arrayCount,
const float  v[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 121 of file GrGLProgramDataManager.cpp.

123 {
124 const Uniform& uni = fUniforms[u.toIndex()];
125 SkASSERT(uni.fType == SkSLType::kFloat2 || uni.fType == SkSLType::kHalf2);
126 SkASSERT(arrayCount > 0);
127 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
128 if (kUnusedUniform != uni.fLocation) {
129 GR_GL_CALL(fGpu->glInterface(), Uniform2fv(uni.fLocation, arrayCount, v));
130 }
131}

◆ set2i()

void GrGLProgramDataManager::set2i ( UniformHandle  u,
int32_t  i0,
int32_t  i1 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 91 of file GrGLProgramDataManager.cpp.

91 {
92 const Uniform& uni = fUniforms[u.toIndex()];
93 SkASSERT(uni.fType == SkSLType::kInt2 || uni.fType == SkSLType::kShort2);
94 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
95 if (kUnusedUniform != uni.fLocation) {
96 GR_GL_CALL(fGpu->glInterface(), Uniform2i(uni.fLocation, i0, i1));
97 }
98}

◆ set2iv()

void GrGLProgramDataManager::set2iv ( UniformHandle  u,
int  arrayCount,
const int32_t  v[] 
) const
override

Definition at line 100 of file GrGLProgramDataManager.cpp.

102 {
103 const Uniform& uni = fUniforms[u.toIndex()];
104 SkASSERT(uni.fType == SkSLType::kInt2 || uni.fType == SkSLType::kShort2);
105 SkASSERT(arrayCount > 0);
106 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
107 if (kUnusedUniform != uni.fLocation) {
108 GR_GL_CALL(fGpu->glInterface(), Uniform2iv(uni.fLocation, arrayCount, v));
109 }
110}

◆ set3f()

void GrGLProgramDataManager::set3f ( UniformHandle  u,
float  v0,
float  v1,
float  v2 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 154 of file GrGLProgramDataManager.cpp.

154 {
155 const Uniform& uni = fUniforms[u.toIndex()];
156 SkASSERT(uni.fType == SkSLType::kFloat3 || uni.fType == SkSLType::kHalf3);
157 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
158 if (kUnusedUniform != uni.fLocation) {
159 GR_GL_CALL(fGpu->glInterface(), Uniform3f(uni.fLocation, v0, v1, v2));
160 }
161}
Vec2Value v2

◆ set3fv()

void GrGLProgramDataManager::set3fv ( UniformHandle  u,
int  arrayCount,
const float  v[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 163 of file GrGLProgramDataManager.cpp.

165 {
166 const Uniform& uni = fUniforms[u.toIndex()];
167 SkASSERT(uni.fType == SkSLType::kFloat3 || uni.fType == SkSLType::kHalf3);
168 SkASSERT(arrayCount > 0);
169 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
170 if (kUnusedUniform != uni.fLocation) {
171 GR_GL_CALL(fGpu->glInterface(), Uniform3fv(uni.fLocation, arrayCount, v));
172 }
173}

◆ set3i()

void GrGLProgramDataManager::set3i ( UniformHandle  u,
int32_t  i0,
int32_t  i1,
int32_t  i2 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 133 of file GrGLProgramDataManager.cpp.

133 {
134 const Uniform& uni = fUniforms[u.toIndex()];
135 SkASSERT(uni.fType == SkSLType::kInt3 || uni.fType == SkSLType::kShort3);
136 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
137 if (kUnusedUniform != uni.fLocation) {
138 GR_GL_CALL(fGpu->glInterface(), Uniform3i(uni.fLocation, i0, i1, i2));
139 }
140}

◆ set3iv()

void GrGLProgramDataManager::set3iv ( UniformHandle  u,
int  arrayCount,
const int32_t  v[] 
) const
override

Definition at line 142 of file GrGLProgramDataManager.cpp.

144 {
145 const Uniform& uni = fUniforms[u.toIndex()];
146 SkASSERT(uni.fType == SkSLType::kInt3 || uni.fType == SkSLType::kShort3);
147 SkASSERT(arrayCount > 0);
148 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
149 if (kUnusedUniform != uni.fLocation) {
150 GR_GL_CALL(fGpu->glInterface(), Uniform3iv(uni.fLocation, arrayCount, v));
151 }
152}

◆ set4f()

void GrGLProgramDataManager::set4f ( UniformHandle  u,
float  v0,
float  v1,
float  v2,
float  v3 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 200 of file GrGLProgramDataManager.cpp.

204 {
205 const Uniform& uni = fUniforms[u.toIndex()];
206 SkASSERT(uni.fType == SkSLType::kFloat4 || uni.fType == SkSLType::kHalf4);
207 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
208 if (kUnusedUniform != uni.fLocation) {
209 GR_GL_CALL(fGpu->glInterface(), Uniform4f(uni.fLocation, v0, v1, v2, v3));
210 }
211}

◆ set4fv()

void GrGLProgramDataManager::set4fv ( UniformHandle  u,
int  arrayCount,
const float  v[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 213 of file GrGLProgramDataManager.cpp.

215 {
216 const Uniform& uni = fUniforms[u.toIndex()];
217 SkASSERT(uni.fType == SkSLType::kFloat4 || uni.fType == SkSLType::kHalf4);
218 SkASSERT(arrayCount > 0);
219 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
220 if (kUnusedUniform != uni.fLocation) {
221 GR_GL_CALL(fGpu->glInterface(), Uniform4fv(uni.fLocation, arrayCount, v));
222 }
223}

◆ set4i()

void GrGLProgramDataManager::set4i ( UniformHandle  u,
int32_t  i0,
int32_t  i1,
int32_t  i2,
int32_t  i3 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 175 of file GrGLProgramDataManager.cpp.

179 {
180 const Uniform& uni = fUniforms[u.toIndex()];
181 SkASSERT(uni.fType == SkSLType::kInt4 || uni.fType == SkSLType::kShort4);
182 SkASSERT(GrShaderVar::kNonArray == uni.fArrayCount);
183 if (kUnusedUniform != uni.fLocation) {
184 GR_GL_CALL(fGpu->glInterface(), Uniform4i(uni.fLocation, i0, i1, i2, i3));
185 }
186}

◆ set4iv()

void GrGLProgramDataManager::set4iv ( UniformHandle  u,
int  arrayCount,
const int32_t  v[] 
) const
override

Definition at line 188 of file GrGLProgramDataManager.cpp.

190 {
191 const Uniform& uni = fUniforms[u.toIndex()];
192 SkASSERT(uni.fType == SkSLType::kInt4 || uni.fType == SkSLType::kShort4);
193 SkASSERT(arrayCount > 0);
194 ASSERT_ARRAY_UPLOAD_IN_BOUNDS(uni, arrayCount);
195 if (kUnusedUniform != uni.fLocation) {
196 GR_GL_CALL(fGpu->glInterface(), Uniform4iv(uni.fLocation, arrayCount, v));
197 }
198}

◆ setMatrix2f()

void GrGLProgramDataManager::setMatrix2f ( UniformHandle  u,
const float  matrix[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 225 of file GrGLProgramDataManager.cpp.

225 {
226 this->setMatrices<2>(u, 1, matrix);
227}

◆ setMatrix2fv()

void GrGLProgramDataManager::setMatrix2fv ( UniformHandle  u,
int  arrayCount,
const float  matrices[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 237 of file GrGLProgramDataManager.cpp.

237 {
238 this->setMatrices<2>(u, arrayCount, m);
239}

◆ setMatrix3f()

void GrGLProgramDataManager::setMatrix3f ( UniformHandle  u,
const float  matrix[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 229 of file GrGLProgramDataManager.cpp.

229 {
230 this->setMatrices<3>(u, 1, matrix);
231}

◆ setMatrix3fv()

void GrGLProgramDataManager::setMatrix3fv ( UniformHandle  u,
int  arrayCount,
const float  matrices[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 241 of file GrGLProgramDataManager.cpp.

241 {
242 this->setMatrices<3>(u, arrayCount, m);
243}

◆ setMatrix4f()

void GrGLProgramDataManager::setMatrix4f ( UniformHandle  u,
const float  matrix[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 233 of file GrGLProgramDataManager.cpp.

233 {
234 this->setMatrices<4>(u, 1, matrix);
235}

◆ setMatrix4fv()

void GrGLProgramDataManager::setMatrix4fv ( UniformHandle  u,
int  arrayCount,
const float  matrices[] 
) const
overridevirtual

Implements GrGLSLProgramDataManager.

Definition at line 245 of file GrGLProgramDataManager.cpp.

245 {
246 this->setMatrices<4>(u, arrayCount, m);
247}

◆ setSamplerUniforms()

void GrGLProgramDataManager::setSamplerUniforms ( const UniformInfoArray samplers,
int  startUnit 
) const

Definition at line 33 of file GrGLProgramDataManager.cpp.

34 {
35 int i = 0;
36 for (const GLUniformInfo& sampler : samplers.items()) {
37 SkASSERT(sampler.fVisibility);
38 if (kUnusedUniform != sampler.fLocation) {
39 GR_GL_CALL(fGpu->glInterface(), Uniform1i(sampler.fLocation, i + startUnit));
40 }
41 ++i;
42 }
43}

The documentation for this class was generated from the following files: