Index: src/gpu/glsl/GrGLSLShaderBuilder.cpp |
diff --git a/src/gpu/glsl/GrGLSLShaderBuilder.cpp b/src/gpu/glsl/GrGLSLShaderBuilder.cpp |
index 91a0f9b1b56a881cee48d0a7f80f86cbb681e5b7..1031f84460acf3089afac81ee8ffd5c4f93c5005 100644 |
--- a/src/gpu/glsl/GrGLSLShaderBuilder.cpp |
+++ b/src/gpu/glsl/GrGLSLShaderBuilder.cpp |
@@ -93,14 +93,7 @@ void GrGLSLShaderBuilder::appendTextureLookup(SkString* out, |
coordName); |
} |
- // This refers to any swizzling we may need to get from some backend internal format to the |
- // format used in GrPixelConfig. If this is implemented by the GrGpu object, then swizzle will |
- // be rgba. For shader prettiness we omit the swizzle rather than appending ".rgba". |
- const GrSwizzle& configSwizzle = glslCaps->configTextureSwizzle(sampler.config()); |
- |
- if (configSwizzle != GrSwizzle::RGBA()) { |
- out->appendf(".%s", configSwizzle.c_str()); |
- } |
+ this->appendTextureSwizzle(out, sampler.config()); |
} |
void GrGLSLShaderBuilder::appendTextureLookup(const GrGLSLSampler& sampler, |
@@ -118,6 +111,33 @@ void GrGLSLShaderBuilder::appendTextureLookupAndModulate(const char* modulation, |
this->codeAppend((GrGLSLExpr4(modulation) * GrGLSLExpr4(lookup)).c_str()); |
} |
+void GrGLSLShaderBuilder::appendTexelFetch(SkString* out, |
+ const GrGLSLSampler& sampler, |
+ const char* coordExpr) const { |
+ const GrGLSLUniformHandler* uniformHandler = fProgramBuilder->uniformHandler(); |
+ SkASSERT(fProgramBuilder->glslCaps()->texelFetchSupport()); |
+ SkASSERT(GrSLTypeIsSamplerType( |
+ uniformHandler->getUniformVariable(sampler.fSamplerUniform).getType())); |
+ |
+ out->appendf("texelFetch(%s, %s)", |
+ uniformHandler->getUniformCStr(sampler.fSamplerUniform), |
+ coordExpr); |
+ |
+ this->appendTextureSwizzle(out, sampler.config()); |
+} |
+ |
+void GrGLSLShaderBuilder::appendTexelFetch(const GrGLSLSampler& sampler, const char* coordExpr) { |
+ this->appendTexelFetch(&this->code(), sampler, coordExpr); |
+} |
+ |
+void GrGLSLShaderBuilder::appendTextureSwizzle(SkString* out, GrPixelConfig config) const { |
+ const GrSwizzle& configSwizzle = fProgramBuilder->glslCaps()->configTextureSwizzle(config); |
+ |
+ if (configSwizzle != GrSwizzle::RGBA()) { |
+ out->appendf(".%s", configSwizzle.c_str()); |
+ } |
+} |
+ |
bool GrGLSLShaderBuilder::addFeature(uint32_t featureBit, const char* extensionName) { |
if (featureBit & fFeaturesAddedMask) { |
return false; |