Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(704)

Unified Diff: src/gpu/gl/GrGLShaderBuilder.cpp

Issue 23018003: Rename GrGLUniformManager to GrGLUniform and ref GrGLUniforms directly Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.h ('k') | src/gpu/gl/GrGLUniform.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLShaderBuilder.cpp
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index 36eb6d5169ebd23a3eb7104f801ab8bb102ac9c9..5556baf9bdf4cdab92550e48e97b2f400cb4c0f3 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -7,7 +7,6 @@
#include "gl/GrGLShaderBuilder.h"
#include "gl/GrGLProgram.h"
-#include "gl/GrGLUniformHandle.h"
#include "GrDrawEffect.h"
#include "GrTexture.h"
@@ -20,7 +19,6 @@ static const int kMaxFSOutputs = 2;
// ES2 FS only guarantees mediump and lowp support
static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar::kMedium_Precision;
-typedef GrGLUniformManager::UniformHandle UniformHandle;
///////////////////////////////////////////////////////////////////////////////
namespace {
@@ -92,7 +90,7 @@ static const char kDstCopyColorName[] = "_dstColor";
///////////////////////////////////////////////////////////////////////////////
GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo,
- GrGLUniformManager& uniformManager,
+ GrGLProgram& program,
const GrGLProgramDesc& desc)
: fUniforms(kVarsPerBlock)
, fVSAttrs(kVarsPerBlock)
@@ -102,7 +100,7 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo,
, fFSInputs(kVarsPerBlock)
, fFSOutputs(kMaxFSOutputs)
, fCtxInfo(ctxInfo)
- , fUniformManager(uniformManager)
+ , fProgram(program)
, fFSFeaturesAddedMask(0)
#if GR_GL_EXPERIMENTAL_GS
, fUsesGS(SkToBool(desc.getHeader().fExperimentalGS))
@@ -110,9 +108,9 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo,
, fUsesGS(false)
#endif
, fSetupFragPosition(false)
- , fRTHeightUniform(GrGLUniformManager::kInvalidUniformHandle)
- , fDstCopyTopLeftUniform (GrGLUniformManager::kInvalidUniformHandle)
- , fDstCopyScaleUniform (GrGLUniformManager::kInvalidUniformHandle)
+ , fRTHeightUniform(NULL)
+ , fDstCopyTopLeftUniform(NULL)
+ , fDstCopyScaleUniform(NULL)
, fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFragPosKey) {
const GrGLProgramDesc::KeyHeader& header = desc.getHeader();
@@ -144,11 +142,11 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo,
fDstCopyTopLeftUniform = this->addUniform(kFragment_ShaderType,
kVec2f_GrSLType,
"DstCopyUpperLeft",
- &dstCopyTopLeftName);
+ &dstCopyTopLeftName)->glUniform();
fDstCopyScaleUniform = this->addUniform(kFragment_ShaderType,
kVec2f_GrSLType,
"DstCopyCoordScale",
- &dstCopyCoordScaleName);
+ &dstCopyCoordScaleName)->glUniform();
const char* fragPos = this->fragmentPosition();
this->fsCodeAppend("\t// Read color from copy of the destination.\n");
this->fsCodeAppendf("\tvec2 _dstTexCoord = (%s.xy - %s) * %s;\n",
@@ -300,7 +298,7 @@ void GrGLShaderBuilder::appendTextureLookup(SkString* out,
out->appendf("%s(%s, %s)",
sample_function_name(varyingType, fCtxInfo.glslGeneration()),
- this->getUniformCStr(sampler.fSamplerUniform),
+ sampler.fSamplerUniform->c_str(),
coordName);
append_swizzle(out, sampler, *fCtxInfo.caps());
}
@@ -380,23 +378,20 @@ const GrGLenum* GrGLShaderBuilder::GetTexParamSwizzle(GrPixelConfig config, cons
}
}
-GrGLUniformManager::UniformHandle GrGLShaderBuilder::addUniformArray(uint32_t visibility,
- GrSLType type,
- const char* name,
- int count,
- const char** outName) {
+GrGLShaderBuilder::Uniform* GrGLShaderBuilder::addUniformArray(uint32_t visibility,
+ GrSLType type,
+ const char* name,
+ int count,
+ const char** outName) {
GrAssert(name && strlen(name));
SkDEBUGCODE(static const uint32_t kVisibilityMask = kVertex_ShaderType | kFragment_ShaderType);
GrAssert(0 == (~kVisibilityMask & visibility));
GrAssert(0 != visibility);
- BuilderUniform& uni = fUniforms.push_back();
- UniformHandle h = index_to_handle(fUniforms.count() - 1);
- GR_DEBUGCODE(UniformHandle h2 =)
- fUniformManager.appendUniform(type, count);
- // We expect the uniform manager to initially have no uniforms and that all uniforms are added
- // by this function. Therefore, the handles should match.
- GrAssert(h2 == h);
+ Uniform& uni = fUniforms.push_back();
+ uni.fGLUniform = fProgram.appendUniform();
+ GR_DEBUGCODE(uni.fGLUniform->initType(count, type));
+
uni.fVariable.setType(type);
uni.fVariable.setTypeModifier(GrGLShaderVar::kUniform_TypeModifier);
this->nameVariable(uni.fVariable.accessName(), 'u', name);
@@ -415,11 +410,7 @@ GrGLUniformManager::UniformHandle GrGLShaderBuilder::addUniformArray(uint32_t vi
*outName = uni.fVariable.c_str();
}
- return h;
-}
-
-const GrGLShaderVar& GrGLShaderBuilder::getUniformVariable(UniformHandle u) const {
- return fUniforms[handle_to_index(u)].fVariable;
+ return &uni;
}
bool GrGLShaderBuilder::addAttribute(GrSLType type,
@@ -512,19 +503,19 @@ const char* GrGLShaderBuilder::fragmentPosition() {
// temporarily change the stage index because we're inserting non-stage code.
CodeStage::AutoStageRestore csar(&fCodeStage, NULL);
- GrAssert(GrGLUniformManager::kInvalidUniformHandle == fRTHeightUniform);
+ GrAssert(NULL == fRTHeightUniform);
const char* rtHeightName;
fRTHeightUniform = this->addUniform(kFragment_ShaderType,
kFloat_GrSLType,
"RTHeight",
- &rtHeightName);
+ &rtHeightName)->glUniform();
this->fFSCode.prependf("\tvec4 %s = vec4(gl_FragCoord.x, %s - gl_FragCoord.y, gl_FragCoord.zw);\n",
kCoordName, rtHeightName);
fSetupFragPosition = true;
}
- GrAssert(GrGLUniformManager::kInvalidUniformHandle != fRTHeightUniform);
+ GrAssert(NULL != fRTHeightUniform);
return kCoordName;
}
}
@@ -640,8 +631,11 @@ void GrGLShaderBuilder::getShader(ShaderType type, SkString* shaderStr) const {
}
}
-void GrGLShaderBuilder::finished(GrGLuint programID) {
- fUniformManager.getUniformLocations(programID, fUniforms);
+void GrGLShaderBuilder::finished(const GrGLContext& context, GrGLuint programID) {
+ int count = fUniforms.count();
+ for (int i = 0; i < count; ++i) {
+ fUniforms[i].glUniform()->initLocations(context, programID, fUniforms[i].c_str(), fUniforms[i].fVisibility);
+ }
}
void GrGLShaderBuilder::emitEffects(
@@ -650,7 +644,7 @@ void GrGLShaderBuilder::emitEffects(
int effectCnt,
SkString* fsInOutColor,
GrSLConstantVec* fsInOutColorKnownValue,
- SkTArray<GrGLUniformManager::UniformHandle, true>* effectSamplerHandles[],
+ SkTArray<GrGLUniform*, true>* effectSamplerHandles[],
GrGLEffect* glEffects[]) {
bool effectEmitted = false;
@@ -669,7 +663,7 @@ void GrGLShaderBuilder::emitEffects(
textureSamplers.push_back_n(numTextures);
for (int t = 0; t < numTextures; ++t) {
textureSamplers[t].init(this, &effect->textureAccess(t), t);
- effectSamplerHandles[e]->push_back(textureSamplers[t].fSamplerUniform);
+ effectSamplerHandles[e]->push_back(textureSamplers[t].fSamplerUniform->glUniform());
}
GrDrawEffect drawEffect(stage, this->hasExplicitLocalCoords());
@@ -734,3 +728,5 @@ const SkString* GrGLShaderBuilder::getEffectAttributeName(int attributeIndex) co
return NULL;
}
+
+
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.h ('k') | src/gpu/gl/GrGLUniform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698