aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLUniformHandler.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2016-11-18 11:58:54 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-21 18:01:43 +0000
commit101b844d6ba031de5c4e95b43f9292f266799237 (patch)
tree138593a7d161695e26b691db6557fd1b22914b4d /src/gpu/gl/GrGLUniformHandler.cpp
parent3502c5cc736f131674147ed19f1942f83f5fb9a4 (diff)
Remove GrGLSLSampler type and subclasses
GrGLSLUniformManager and GrGLSLProgramDataManager subclasses handle sampler variation across GPU backends. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5002 Change-Id: I968b006bab978c2fa209d1f7eda710c298d1212f Reviewed-on: https://skia-review.googlesource.com/5002 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/gl/GrGLUniformHandler.cpp')
-rw-r--r--src/gpu/gl/GrGLUniformHandler.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
index c388e4621b..37f241838f 100644
--- a/src/gpu/gl/GrGLUniformHandler.cpp
+++ b/src/gpu/gl/GrGLUniformHandler.cpp
@@ -45,6 +45,7 @@ GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
uni.fVariable.setArrayCount(arrayCount);
uni.fVisibility = visibility;
uni.fVariable.setPrecision(precision);
+ uni.fLocation = -1;
if (outName) {
*outName = uni.fVariable.c_str();
@@ -52,19 +53,30 @@ GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1);
}
-GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::internalAddSampler(uint32_t visibility,
- GrPixelConfig config,
- GrSLType type,
- GrSLPrecision precision,
- const char* name) {
+GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::addSampler(uint32_t visibility,
+ GrSwizzle swizzle,
+ GrSLType type,
+ GrSLPrecision precision,
+ const char* name) {
SkASSERT(name && strlen(name));
SkDEBUGCODE(static const uint32_t kVisMask = kVertex_GrShaderFlag | kFragment_GrShaderFlag);
SkASSERT(0 == (~kVisMask & visibility));
SkASSERT(0 != visibility);
+
SkString mangleName;
char prefix = 'u';
fProgramBuilder->nameVariable(&mangleName, prefix, name, true);
- fSamplers.emplace_back(visibility, config, type, precision, mangleName.c_str());
+
+ UniformInfo& sampler = fSamplers.push_back();
+ SkASSERT(GrSLTypeIsCombinedSamplerType(type));
+ sampler.fVariable.setType(type);
+ sampler.fVariable.setTypeModifier(GrGLSLShaderVar::kUniform_TypeModifier);
+ sampler.fVariable.setPrecision(precision);
+ sampler.fVariable.setName(mangleName);
+ sampler.fLocation = -1;
+ sampler.fVisibility = visibility;
+ fSamplerSwizzles.push_back(swizzle);
+ SkASSERT(fSamplers.count() == fSamplerSwizzles.count());
return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1);
}
@@ -76,8 +88,8 @@ void GrGLUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString*
}
}
for (int i = 0; i < fSamplers.count(); ++i) {
- if (fSamplers[i].visibility() & visibility) {
- fSamplers[i].fShaderVar.appendDecl(fProgramBuilder->glslCaps(), out);
+ if (fSamplers[i].fVisibility & visibility) {
+ fSamplers[i].fVariable.appendDecl(fProgramBuilder->glslCaps(), out);
out->append(";\n");
}
}
@@ -92,7 +104,7 @@ void GrGLUniformHandler::bindUniformLocations(GrGLuint programID, const GrGLCaps
}
for (int i = 0; i < fSamplers.count(); ++i) {
GrGLint location = i + uniformCnt;
- GL_CALL(BindUniformLocation(programID, location, fSamplers[i].fShaderVar.c_str()));
+ GL_CALL(BindUniformLocation(programID, location, fSamplers[i].fVariable.c_str()));
fSamplers[i].fLocation = location;
}
}
@@ -108,7 +120,7 @@ void GrGLUniformHandler::getUniformLocations(GrGLuint programID, const GrGLCaps&
}
for (int i = 0; i < fSamplers.count(); ++i) {
GrGLint location;
- GL_CALL_RET(location, GetUniformLocation(programID, fSamplers[i].fShaderVar.c_str()));
+ GL_CALL_RET(location, GetUniformLocation(programID, fSamplers[i].fVariable.c_str()));
fSamplers[i].fLocation = location;
}
}