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

#include <GrSPIRVUniformHandler.h>

Inheritance diagram for GrSPIRVUniformHandler:
GrGLSLUniformHandler

Classes

struct  SPIRVUniformInfo
 

Public Types

enum  { kUniformBinding = 0 , kUniformDescriptorSet = 0 , kSamplerTextureDescriptorSet = 1 }
 
typedef SkTBlockList< SPIRVUniformInfoUniformInfoArray
 
- Public Types inherited from GrGLSLUniformHandler
using UniformHandle = GrGLSLProgramDataManager::UniformHandle
 

Public Member Functions

const GrShaderVargetUniformVariable (UniformHandle u) const override
 
const char * getUniformCStr (UniformHandle u) const override
 
uint32_t getRTFlipOffset () const
 
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

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
 
UniformHandle internalAddUniformArray (const GrProcessor *owner, uint32_t visibility, SkSLType type, const char *name, bool mangleName, int arrayCount, const char **outName) override
 

Friends

class GrD3DPipelineStateBuilder
 
class GrDawnProgramBuilder
 

Additional Inherited Members

- Protected Member Functions inherited from GrGLSLUniformHandler
 GrGLSLUniformHandler (GrGLSLProgramBuilder *program)
 
- Protected Attributes inherited from GrGLSLUniformHandler
GrGLSLProgramBuilderfProgramBuilder
 

Detailed Description

Definition at line 21 of file GrSPIRVUniformHandler.h.

Member Typedef Documentation

◆ UniformInfoArray

Definition at line 31 of file GrSPIRVUniformHandler.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
kUniformBinding 
kUniformDescriptorSet 
kSamplerTextureDescriptorSet 

Definition at line 32 of file GrSPIRVUniformHandler.h.

Member Function Documentation

◆ addSampler()

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

Implements GrGLSLUniformHandler.

Definition at line 227 of file GrSPIRVUniformHandler.cpp.

232 {
233 SkASSERT(name && strlen(name));
234
235 int binding = fSamplers.count() * 2;
236
237 SkString mangleName = fProgramBuilder->nameVariable('u', name, /*mangle=*/true);
238 SkString layoutQualifier = SkStringPrintf("direct3d, set = %d, sampler = %d, texture = %d",
240 binding,
241 binding + 1);
242
243 SPIRVUniformInfo& uniformInfo = fSamplers.emplace_back();
244 uniformInfo.fVariable =
245 GrShaderVar{std::move(mangleName),
249 std::move(layoutQualifier),
250 SkString()};
251
252 uniformInfo.fVisibility = kFragment_GrShaderFlag;
253 uniformInfo.fOwner = nullptr;
254 uniformInfo.fRawName = SkString(name);
255 uniformInfo.fUBOOffset = 0;
256
257 fSamplerSwizzles.push_back(swizzle);
258 SkASSERT(fSamplerSwizzles.size() == fSamplers.count());
259
260 return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1);
261}
@ kFragment_GrShaderFlag
static SkSLType SkSLCombinedSamplerTypeForTextureType(GrTextureType type)
Definition GrUtil.h:50
#define SkASSERT(cond)
Definition SkAssert.h:116
SK_API SkString static SkString SkStringPrintf()
Definition SkString.h:287
GrTextureType textureType() const
SkString nameVariable(char prefix, const char *name, bool mangle=true)
GrGLSLProgramBuilder * fProgramBuilder
int count() const
T & emplace_back(Args &&... args)
int size() const
Definition SkTArray.h:416
const char * name
Definition fuchsia.cc:50

◆ appendUniformDecls()

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

Implements GrGLSLUniformHandler.

Definition at line 273 of file GrSPIRVUniformHandler.cpp.

273 {
274 for (const SPIRVUniformInfo& sampler : fSamplers.items()) {
275 if (sampler.fVisibility & visibility) {
276 sampler.fVariable.appendDecl(fProgramBuilder->shaderCaps(), out);
277 out->append(";\n");
278 }
279 }
280 SkString uniformsString;
281 for (const UniformInfo& uniform : fUniforms.items()) {
282 if (uniform.fVisibility & visibility) {
284 uniformsString.append(";\n");
285 }
286 }
287 if (!uniformsString.isEmpty()) {
288 out->appendf("layout (set = %d, binding = %d) uniform UniformBuffer\n{\n",
290 out->appendf("%s\n};\n", uniformsString.c_str());
291 }
292}
const GrShaderCaps * shaderCaps() const
UniformInfo & uniform(int idx) override
void appendDecl(const GrShaderCaps *, SkString *out) const
bool isEmpty() const
Definition SkString.h:130
void append(const char text[])
Definition SkString.h:203
const char * c_str() const
Definition SkString.h:133

◆ getRTFlipOffset()

uint32_t GrSPIRVUniformHandler::getRTFlipOffset ( ) const

Definition at line 294 of file GrSPIRVUniformHandler.cpp.

294 {
295 uint32_t currentOffset = fCurrentUBOOffset;
296 return get_ubo_offset(&currentOffset, SkSLType::kFloat2, 0);
297}

◆ getUniformCStr()

const char * GrSPIRVUniformHandler::getUniformCStr ( UniformHandle  u) const
overridevirtual

Shortcut for getUniformVariable(u).c_str()

Implements GrGLSLUniformHandler.

Definition at line 22 of file GrSPIRVUniformHandler.cpp.

22 {
23 return fUniforms.item(u.toIndex()).fVariable.getName().c_str();
24}
const SkString & getName() const
Definition GrShaderVar.h:91
T & item(int i)

◆ getUniformVariable()

const GrShaderVar & GrSPIRVUniformHandler::getUniformVariable ( UniformHandle  u) const
overridevirtual

Implements GrGLSLUniformHandler.

Definition at line 18 of file GrSPIRVUniformHandler.cpp.

18 {
19 return fUniforms.item(u.toIndex()).fVariable;
20}

◆ internalAddUniformArray()

GrGLSLUniformHandler::UniformHandle GrSPIRVUniformHandler::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 188 of file GrSPIRVUniformHandler.cpp.

195 {
196 char prefix = 'u';
197 if ('u' == name[0] || !strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) {
198 prefix = '\0';
199 }
200 SkString resolvedName = fProgramBuilder->nameVariable(prefix, name, mangleName);
201
202 int offset = get_ubo_offset(&fCurrentUBOOffset, type, arrayCount);
203 SkString layoutQualifier;
204 layoutQualifier.appendf("offset = %d", offset);
205
206 SPIRVUniformInfo tempInfo;
207 tempInfo.fVariable = GrShaderVar{std::move(resolvedName),
208 type,
210 arrayCount,
211 std::move(layoutQualifier),
212 SkString()};
213
214 tempInfo.fVisibility = visibility;
215 tempInfo.fOwner = owner;
216 tempInfo.fRawName = SkString(name);
217 tempInfo.fUBOOffset = offset;
218
219 fUniforms.push_back(tempInfo);
220
221 if (outName) {
222 *outName = fUniforms.back().fVariable.c_str();
223 }
224 return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1);
225}
#define GR_NO_MANGLE_PREFIX
GrGLSLProgramDataManager::UniformHandle UniformHandle
const char * c_str() const
Definition GrShaderVar.h:94
void void void appendf(const char format[],...) SK_PRINTF_LIKE(2
Definition SkString.cpp:550
Point offset

◆ numUniforms()

int GrSPIRVUniformHandler::numUniforms ( ) const
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 39 of file GrSPIRVUniformHandler.h.

39 {
40 return fUniforms.count();
41 }

◆ samplerSwizzle()

skgpu::Swizzle GrSPIRVUniformHandler::samplerSwizzle ( SamplerHandle  handle) const
overrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 268 of file GrSPIRVUniformHandler.cpp.

269 {
270 return fSamplerSwizzles[handle.toIndex()];
271}

◆ samplerVariable()

const char * GrSPIRVUniformHandler::samplerVariable ( SamplerHandle  handle) const
overrideprivatevirtual

Implements GrGLSLUniformHandler.

Definition at line 263 of file GrSPIRVUniformHandler.cpp.

264 {
265 return fSamplers.item(handle.toIndex()).fVariable.getName().c_str();
266}

◆ uniform() [1/2]

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

Implements GrGLSLUniformHandler.

Definition at line 46 of file GrSPIRVUniformHandler.h.

46 {
47 return fUniforms.item(idx);
48 }

◆ uniform() [2/2]

UniformInfo & GrSPIRVUniformHandler::uniform ( int  idx)
inlineoverridevirtual

Implements GrGLSLUniformHandler.

Definition at line 43 of file GrSPIRVUniformHandler.h.

43 {
44 return fUniforms.item(idx);
45 }

Friends And Related Symbol Documentation

◆ GrD3DPipelineStateBuilder

friend class GrD3DPipelineStateBuilder
friend

Definition at line 73 of file GrSPIRVUniformHandler.h.

◆ GrDawnProgramBuilder

friend class GrDawnProgramBuilder
friend

Definition at line 74 of file GrSPIRVUniformHandler.h.

Member Data Documentation

◆ kUniformsPerBlock

const int GrSPIRVUniformHandler::kUniformsPerBlock = 8
static

Definition at line 23 of file GrSPIRVUniformHandler.h.


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