Flutter Engine
The Flutter Engine
GrUniformDataManager.h
Go to the documentation of this file.
1/*
2 * Copyright 2020 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrUniformDataManager_DEFINED
9#define GrUniformDataManager_DEFINED
10
12
17
18/**
19 * Subclass of GrGLSLProgramDataManager used to store uniforms for a program in a CPU buffer that
20 * can be uploaded to a UBO. This currently assumes uniform layouts that are compatible with
21 * Vulkan, Dawn, and D3D12. It could be used more broadly if this aspect was made configurable.
22 */
24public:
25 GrUniformDataManager(uint32_t uniformCount, uint32_t uniformSize);
26
27 void set1i(UniformHandle, int32_t) const override;
28 void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
29 void set1f(UniformHandle, float v0) const override;
30 void set1fv(UniformHandle, int arrayCount, const float v[]) const override;
31 void set2i(UniformHandle, int32_t, int32_t) const override;
32 void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
33 void set2f(UniformHandle, float, float) const override;
34 void set2fv(UniformHandle, int arrayCount, const float v[]) const override;
35 void set3i(UniformHandle, int32_t, int32_t, int32_t) const override;
36 void set3iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
37 void set3f(UniformHandle, float, float, float) const override;
38 void set3fv(UniformHandle, int arrayCount, const float v[]) const override;
39 void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const override;
40 void set4iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
41 void set4f(UniformHandle, float, float, float, float) const override;
42 void set4fv(UniformHandle, int arrayCount, const float v[]) const override;
43 // Matrices are column-major. The following three calls upload a single matrix into a uniform.
44 void setMatrix2f(UniformHandle, const float matrix[]) const override;
45 void setMatrix3f(UniformHandle, const float matrix[]) const override;
46 void setMatrix4f(UniformHandle, const float matrix[]) const override;
47 // These three calls upload arrayCount matrices into a uniform array.
48 void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override;
49 void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const override;
50 void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const override;
51
52 // For the uniform data to be dirty so that we will reupload on the next use.
53 void markDirty() { fUniformsDirty = true; }
54
55protected:
56 struct Uniform {
57 uint32_t fOffset : 24;
60 int fArrayCount;
61 )
62 };
63
64 int copyUniforms(void* dest, const void* src, int numUniforms, SkSLType uniformType) const;
65
66 template <int N, SkSLType kFullType, SkSLType kHalfType>
67 inline void set(UniformHandle u, const void* v) const;
68 template <int N, SkSLType kFullType, SkSLType kHalfType>
69 inline void setv(UniformHandle u, int arrayCount, const void* v) const;
70 template <int N, SkSLType FullType, SkSLType HalfType>
71 inline void setMatrices(UniformHandle, int arrayCount, const float matrices[]) const;
72
73 void* getBufferPtrAndMarkDirty(const Uniform& uni) const;
74
75 uint32_t fUniformSize;
76 bool fWrite16BitUniforms = false;
77
79
81 mutable bool fUniformsDirty = false;
82};
83
84#endif
SkSLType
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID()
void set1fv(UniformHandle, int arrayCount, const float v[]) const override
void * getBufferPtrAndMarkDirty(const Uniform &uni) const
void setv(UniformHandle u, int arrayCount, const void *v) const
void set2f(UniformHandle, float, float) const override
void set3f(UniformHandle, float, float, float) const override
GrUniformDataManager(uint32_t uniformCount, uint32_t uniformSize)
void setMatrix2f(UniformHandle, const float matrix[]) const override
void set3iv(UniformHandle, int arrayCount, const int32_t v[]) const override
void set4iv(UniformHandle, int arrayCount, const int32_t v[]) const override
void setMatrix4f(UniformHandle, const float matrix[]) const override
void setMatrix3f(UniformHandle, const float matrix[]) const override
void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override
void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override
void set1i(UniformHandle, int32_t) const override
void set4fv(UniformHandle, int arrayCount, const float v[]) const override
void setMatrices(UniformHandle, int arrayCount, const float matrices[]) const
int copyUniforms(void *dest, const void *src, int numUniforms, SkSLType uniformType) const
void set2i(UniformHandle, int32_t, int32_t) const override
void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const override
void set1f(UniformHandle, float v0) const override
void set3fv(UniformHandle, int arrayCount, const float v[]) const override
void set(UniformHandle u, const void *v) const
void set2fv(UniformHandle, int arrayCount, const float v[]) const override
void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override
skia_private::TArray< Uniform, true > fUniforms
void set4f(UniformHandle, float, float, float, float) const override
void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const override
void set3i(UniformHandle, int32_t, int32_t, int32_t) const override
void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const override
unsigned useCenter Optional< SkMatrix > matrix
Definition: SkRecords.h:258
dest
Definition: zip.py:79