1 /* 2 * Copyright 2019 Google Inc. 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 GrDawnUniformHandler_DEFINED 9 #define GrDawnUniformHandler_DEFINED 10 11 #include "src/gpu/GrAllocator.h" 12 #include "src/gpu/glsl/GrGLSLUniformHandler.h" 13 14 class GrDawnGpu; 15 16 class GrDawnUniformHandler : public GrGLSLUniformHandler { 17 public: 18 static const int kUniformsPerBlock = 8; 19 20 const GrShaderVar& getUniformVariable(UniformHandle u) const override; 21 const char* getUniformCStr(UniformHandle u) const override; 22 23 struct UniformInfo { 24 GrShaderVar fVar; 25 int fUBOOffset; 26 int fVisibility; 27 }; 28 typedef GrTAllocator<UniformInfo> UniformInfoArray; 29 enum { 30 kUniformBinding = 0, 31 }; 32 uint32_t getRTHeightOffset() const; 33 34 private: 35 explicit GrDawnUniformHandler(GrGLSLProgramBuilder* program); 36 37 SamplerHandle addSampler(const GrSurfaceProxy*, GrSamplerState, const GrSwizzle&, 38 const char* name, const GrShaderCaps*) override; 39 const char* samplerVariable(SamplerHandle handle) const override; 40 GrSwizzle samplerSwizzle(SamplerHandle handle) const override; 41 void appendUniformDecls(GrShaderFlags visibility, SkString*) const override; 42 UniformHandle internalAddUniformArray(uint32_t visibility, 43 GrSLType type, 44 const char* name, 45 bool mangleName, 46 int arrayCount, 47 const char** outName) override; 48 49 void updateUniformVisibility(UniformHandle u, uint32_t visibility) override; 50 51 UniformInfoArray fUniforms; 52 UniformInfoArray fSamplers; 53 UniformInfoArray fTextures; 54 SkTArray<GrSwizzle> fSamplerSwizzles; 55 SkTArray<SkString> fSamplerReferences; 56 57 uint32_t fCurrentUBOOffset = 0; 58 uint32_t fRTHeightOffset = 0; 59 60 friend class GrDawnProgramBuilder; 61 typedef GrGLSLUniformHandler INHERITED; 62 }; 63 64 #endif 65