Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Private Member Functions | Friends | List of all members
GrGLUniformHandler Class Reference

#include <GrGLUniformHandler.h>

Inheritance diagram for GrGLUniformHandler:
GrGLSLUniformHandler

Public Member Functions

const GrShaderVargetUniformVariable (UniformHandle u) const override
 
const char * getUniformCStr (UniformHandle u) const override
 
int numUniforms () const override
 
UniformInfouniform (int idx) override
 
const UniformInfouniform (int idx) const override
 
- Public Member Functions inherited from GrGLSLUniformHandler
virtual ~GrGLSLUniformHandler ()
 
UniformHandle addUniform (const GrProcessor *owner, uint32_t visibility, SkSLType type, const char *name, const char **outName=nullptr)
 
UniformHandle addUniformArray (const GrProcessor *owner, uint32_t visibility, SkSLType type, const char *name, int arrayCount, const char **outName=nullptr)
 
GrShaderVar getUniformMapping (const GrProcessor &owner, SkString rawName) const
 
GrShaderVar liftUniformToVertexShader (const GrProcessor &owner, SkString rawName)
 

Static Public Attributes

static const int kUniformsPerBlock = 8
 

Private Member Functions

UniformHandle internalAddUniformArray (const GrProcessor *owner, uint32_t visibility, SkSLType type, const char *name, bool mangleName, int arrayCount, const char **outName) override
 
SamplerHandle addSampler (const GrBackendFormat &, GrSamplerState, const skgpu::Swizzle &, const char *name, const GrShaderCaps *) override
 
const char * samplerVariable (SamplerHandle handle) const override
 
skgpu::Swizzle samplerSwizzle (SamplerHandle handle) const override
 
void appendUniformDecls (GrShaderFlags visibility, SkString *) const override
 

Friends

class GrGLProgramBuilder
 

Additional Inherited Members

- Public Types inherited from GrGLSLUniformHandler
using UniformHandle = GrGLSLProgramDataManager::UniformHandle
 
- Protected Member Functions inherited from GrGLSLUniformHandler
 GrGLSLUniformHandler (GrGLSLProgramBuilder *program)
 
- Protected Attributes inherited from GrGLSLUniformHandler
GrGLSLProgramBuilderfProgramBuilder
 

Detailed Description

Definition at line 18 of file GrGLUniformHandler.h.

Member Function Documentation

◆ addSampler()

GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::addSampler ( const GrBackendFormat backendFormat,
GrSamplerState  ,
const skgpu::Swizzle swizzle,
const char *  name,
const GrShaderCaps shaderCaps 
)
overrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 71 of file GrGLUniformHandler.cpp.

76 {
77 SkASSERT(name && strlen(name));
78
79 constexpr char prefix = 'u';
80 SkString mangleName = fProgramBuilder->nameVariable(prefix, name, true);
81
82 GrTextureType type = backendFormat.textureType();
83
84 GLUniformInfo tempInfo;
85 tempInfo.fVariable = GrShaderVar{std::move(mangleName),
87
88 tempInfo.fVisibility = kFragment_GrShaderFlag;
89 tempInfo.fOwner = nullptr;
90 tempInfo.fRawName = SkString(name);
91 tempInfo.fLocation = -1;
92
93 fSamplers.push_back(tempInfo);
94 fSamplerSwizzles.push_back(swizzle);
95 SkASSERT(fSamplers.count() == fSamplerSwizzles.size());
96
97 return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1);
98}
@ kFragment_GrShaderFlag
GrTextureType
static SkSLType SkSLCombinedSamplerTypeForTextureType(GrTextureType type)
Definition GrUtil.h:50
#define SkASSERT(cond)
Definition SkAssert.h:116
GrTextureType textureType() const
SkString nameVariable(char prefix, const char *name, bool mangle=true)
GrGLSLProgramBuilder * fProgramBuilder
int count() const
int size() const
Definition SkTArray.h:416
const char * name
Definition fuchsia.cc:50

◆ appendUniformDecls()

void GrGLUniformHandler::appendUniformDecls ( GrShaderFlags  visibility,
SkString out 
) const
overrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 100 of file GrGLUniformHandler.cpp.

100 {
101 for (const UniformInfo& uniform : fUniforms.items()) {
102 if (uniform.fVisibility & visibility) {
104 out->append(";");
105 }
106 }
107 for (const UniformInfo& sampler : fSamplers.items()) {
108 if (sampler.fVisibility & visibility) {
109 sampler.fVariable.appendDecl(fProgramBuilder->shaderCaps(), out);
110 out->append(";\n");
111 }
112 }
113}
const GrShaderCaps * shaderCaps() const
UniformInfo & uniform(int idx) override
void appendDecl(const GrShaderCaps *, SkString *out) const

◆ getUniformCStr()

const char * GrGLUniformHandler::getUniformCStr ( UniformHandle  u) const
inlineoverridevirtual

Shortcut for getUniformVariable(u).c_str()

Implements GrGLSLUniformHandler.

Definition at line 26 of file GrGLUniformHandler.h.

26 {
27 return this->getUniformVariable(u).c_str();
28 }
const GrShaderVar & getUniformVariable(UniformHandle u) const override
const char * c_str() const
Definition GrShaderVar.h:94

◆ getUniformVariable()

const GrShaderVar & GrGLUniformHandler::getUniformVariable ( UniformHandle  u) const
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 22 of file GrGLUniformHandler.h.

22 {
23 return fUniforms.item(u.toIndex()).fVariable;
24 }
T & item(int i)

◆ internalAddUniformArray()

GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray ( const GrProcessor owner,
uint32_t  visibility,
SkSLType  type,
const char *  name,
bool  mangleName,
int  arrayCount,
const char **  outName 
)
overrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 28 of file GrGLUniformHandler.cpp.

35 {
36 SkASSERT(name && strlen(name));
38 SkASSERT(0 != visibility);
39
40 // TODO this is a bit hacky, lets think of a better way. Basically we need to be able to use
41 // the uniform view matrix name in the GP, and the GP is immutable so it has to tell the PB
42 // exactly what name it wants to use for the uniform view matrix. If we prefix anythings, then
43 // the names will mismatch. I think the correct solution is to have all GPs which need the
44 // uniform view matrix, they should upload the view matrix in their setData along with regular
45 // uniforms.
46 char prefix = 'u';
47 if ('u' == name[0] || !strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) {
48 prefix = '\0';
49 }
50 SkString resolvedName = fProgramBuilder->nameVariable(prefix, name, mangleName);
51
52 GLUniformInfo tempInfo;
53 tempInfo.fVariable = GrShaderVar{std::move(resolvedName),
54 type,
56 arrayCount};
57
58 tempInfo.fVisibility = visibility;
59 tempInfo.fOwner = owner;
60 tempInfo.fRawName = SkString(name);
61 tempInfo.fLocation = -1;
62
63 fUniforms.push_back(tempInfo);
64
65 if (outName) {
66 *outName = fUniforms.back().fVariable.c_str();
67 }
68 return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1);
69}
#define GR_NO_MANGLE_PREFIX
bool valid_name(const char *name)
GrGLSLProgramDataManager::UniformHandle UniformHandle

◆ numUniforms()

int GrGLUniformHandler::numUniforms ( ) const
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 30 of file GrGLUniformHandler.h.

30 {
31 return fUniforms.count();
32 }

◆ samplerSwizzle()

skgpu::Swizzle GrGLUniformHandler::samplerSwizzle ( SamplerHandle  handle) const
inlineoverrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 62 of file GrGLUniformHandler.h.

62 {
63 return fSamplerSwizzles[handle.toIndex()];
64 }

◆ samplerVariable()

const char * GrGLUniformHandler::samplerVariable ( SamplerHandle  handle) const
inlineoverrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 58 of file GrGLUniformHandler.h.

58 {
59 return fSamplers.item(handle.toIndex()).fVariable.c_str();
60 }

◆ uniform() [1/2]

const UniformInfo & GrGLUniformHandler::uniform ( int  idx) const
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 37 of file GrGLUniformHandler.h.

37 {
38 return fUniforms.item(idx);
39 }

◆ uniform() [2/2]

UniformInfo & GrGLUniformHandler::uniform ( int  idx)
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 34 of file GrGLUniformHandler.h.

34 {
35 return fUniforms.item(idx);
36 }

Friends And Related Symbol Documentation

◆ GrGLProgramBuilder

friend class GrGLProgramBuilder
friend

Definition at line 83 of file GrGLUniformHandler.h.

Member Data Documentation

◆ kUniformsPerBlock

const int GrGLUniformHandler::kUniformsPerBlock = 8
static

Definition at line 20 of file GrGLUniformHandler.h.


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