/* * Copyright 2019 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrDawnUniformHandler_DEFINED #define GrDawnUniformHandler_DEFINED #include "src/gpu/GrAllocator.h" #include "src/gpu/glsl/GrGLSLUniformHandler.h" class GrDawnGpu; class GrDawnUniformHandler : public GrGLSLUniformHandler { public: static const int kUniformsPerBlock = 8; const GrShaderVar& getUniformVariable(UniformHandle u) const override; const char* getUniformCStr(UniformHandle u) const override; struct UniformInfo { GrShaderVar fVar; int fUBOOffset; int fVisibility; }; typedef GrTAllocator UniformInfoArray; enum { kGeometryBinding = 0, kFragBinding = 1, kSamplerBindingBase = 2, }; private: explicit GrDawnUniformHandler(GrGLSLProgramBuilder* program); SamplerHandle addSampler(const GrTexture*, const GrSamplerState&, const GrSwizzle&, const char* name, const GrShaderCaps*) override; const char* samplerVariable(SamplerHandle handle) const override; GrSwizzle samplerSwizzle(SamplerHandle handle) const override; void appendUniformDecls(GrShaderFlags visibility, SkString*) const override; UniformHandle internalAddUniformArray(uint32_t visibility, GrSLType type, const char* name, bool mangleName, int arrayCount, const char** outName) override; UniformInfoArray fUniforms; UniformInfoArray fSamplers; UniformInfoArray fTextures; SkTArray fSamplerSwizzles; SkTArray fSamplerReferences; uint32_t fCurrentGeometryUBOOffset = 0; uint32_t fCurrentFragmentUBOOffset = 0; friend class GrDawnProgramBuilder; typedef GrGLSLUniformHandler INHERITED; }; #endif