blob: f1b9d8c0f81343498816c84c8a119e7b78058b70 [file] [log] [blame]
egdaniel7ea439b2015-12-03 09:20:44 -08001/*
2 * Copyright 2015 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 GrGLUniformHandler_DEFINED
9#define GrGLUniformHandler_DEFINED
10
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "src/gpu/glsl/GrGLSLUniformHandler.h"
egdaniel7ea439b2015-12-03 09:20:44 -080012
Mike Kleinc0bd9f92019-04-23 12:05:21 -050013#include "src/gpu/gl/GrGLProgramDataManager.h"
egdaniel7ea439b2015-12-03 09:20:44 -080014
15class GrGLCaps;
16
egdaniel7ea439b2015-12-03 09:20:44 -080017class GrGLUniformHandler : public GrGLSLUniformHandler {
18public:
jvanverth633b3562016-03-23 11:01:22 -070019 static const int kUniformsPerBlock = 8;
20
Brian Salomon99938a82016-11-21 13:41:08 -050021 const GrShaderVar& getUniformVariable(UniformHandle u) const override {
egdaniel7ea439b2015-12-03 09:20:44 -080022 return fUniforms[u.toIndex()].fVariable;
23 }
24
25 const char* getUniformCStr(UniformHandle u) const override {
26 return this->getUniformVariable(u).c_str();
27 }
28private:
29 explicit GrGLUniformHandler(GrGLSLProgramBuilder* program)
30 : INHERITED(program)
Brian Salomon101b8442016-11-18 11:58:54 -050031 , fUniforms(kUniformsPerBlock)
Brian Salomon662ea4b2018-07-12 14:53:49 -040032 , fSamplers(kUniformsPerBlock) {}
egdaniel7ea439b2015-12-03 09:20:44 -080033
34 UniformHandle internalAddUniformArray(uint32_t visibility,
35 GrSLType type,
egdaniel7ea439b2015-12-03 09:20:44 -080036 const char* name,
37 bool mangleName,
38 int arrayCount,
39 const char** outName) override;
40
Greg Daniel9a51a862018-11-30 10:18:14 -050041 SamplerHandle addSampler(const GrTexture*, const GrSamplerState&, const char* name,
42 const GrShaderCaps*) override;
egdaniel09aa1fc2016-04-20 07:09:46 -070043
Brian Salomon99938a82016-11-21 13:41:08 -050044 const GrShaderVar& samplerVariable(SamplerHandle handle) const override {
Brian Salomon101b8442016-11-18 11:58:54 -050045 return fSamplers[handle.toIndex()].fVariable;
46 }
47
48 GrSwizzle samplerSwizzle(SamplerHandle handle) const override {
49 return fSamplerSwizzles[handle.toIndex()];
egdaniel09aa1fc2016-04-20 07:09:46 -070050 }
51
cdalton5e58cee2016-02-11 12:49:47 -080052 void appendUniformDecls(GrShaderFlags visibility, SkString*) const override;
egdaniel7ea439b2015-12-03 09:20:44 -080053
54 // Manually set uniform locations for all our uniforms.
55 void bindUniformLocations(GrGLuint programID, const GrGLCaps& caps);
56
57 // Updates the loction of the Uniforms if we cannot bind uniform locations manually
58 void getUniformLocations(GrGLuint programID, const GrGLCaps& caps);
59
60 const GrGLGpu* glGpu() const;
61
62 typedef GrGLProgramDataManager::UniformInfo UniformInfo;
63 typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray;
64
Brian Salomon101b8442016-11-18 11:58:54 -050065 UniformInfoArray fUniforms;
66 UniformInfoArray fSamplers;
67 SkTArray<GrSwizzle> fSamplerSwizzles;
egdaniel09aa1fc2016-04-20 07:09:46 -070068
egdaniel7ea439b2015-12-03 09:20:44 -080069 friend class GrGLProgramBuilder;
70
halcanary9d524f22016-03-29 09:03:52 -070071 typedef GrGLSLUniformHandler INHERITED;
egdaniel7ea439b2015-12-03 09:20:44 -080072};
73
74#endif