diff options
author | Brian Osman <brianosman@google.com> | 2018-04-17 11:19:57 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-17 17:20:44 +0000 |
commit | 4b2f915f9d29b7b5c777fb96d36bd5c00c6e54c0 (patch) | |
tree | 86358718f5335921373c0961488d982776ac8617 /src | |
parent | 053d04697acd74c45883058e81e422d731f06a0f (diff) |
Move external texture extension logic into SkSL
Automatically enable the extension if any external samplers are used.
Bug: skia:7713
Change-Id: I1de2faddd7c8eda864873941b90d7a4c4606497a
Reviewed-on: https://skia-review.googlesource.com/121797
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 4 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLProgramBuilder.cpp | 9 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLShaderBuilder.h | 1 | ||||
-rw-r--r-- | src/sksl/SkSLGLSLCodeGenerator.cpp | 8 | ||||
-rw-r--r-- | src/sksl/SkSLGLSLCodeGenerator.h | 1 | ||||
-rw-r--r-- | src/sksl/SkSLUtil.h | 4 |
6 files changed, 13 insertions, 14 deletions
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index 85c9fb2891..8a5c2357d1 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -3568,10 +3568,6 @@ bool GrGLGpu::createCopyProgram(GrTexture* srcTex) { fshaderTxt.appendf("#extension %s : require\n", extension); } } - if (samplerType == kTextureExternalSampler_GrSLType) { - fshaderTxt.appendf("#extension %s : require\n", - shaderCaps->externalTextureExtensionString()); - } vTexCoord.setTypeModifier(GrShaderVar::kIn_TypeModifier); vTexCoord.appendDecl(shaderCaps, &fshaderTxt); fshaderTxt.append(";"); diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp index 914a958a22..91ac5c3e71 100644 --- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp +++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp @@ -257,15 +257,6 @@ void GrGLSLProgramBuilder::emitSamplers( const GrResourceIOProcessor::TextureSampler& sampler = processor.textureSampler(t); name.printf("TextureSampler_%d", outTexSamplerHandles->count()); GrSLType samplerType = sampler.peekTexture()->texturePriv().samplerType(); - if (kTextureExternalSampler_GrSLType == samplerType) { - const char* externalFeatureString = - this->shaderCaps()->externalTextureExtensionString(); - // We shouldn't ever create a GrGLTexture that requires external sampler type - SkASSERT(externalFeatureString); - this->addFeature(sampler.visibility(), - 1 << GrGLSLShaderBuilder::kExternalTexture_GLSLPrivateFeature, - externalFeatureString); - } outTexSamplerHandles->emplace_back(this->emitSampler( samplerType, sampler.peekTexture()->config(), name.c_str(), sampler.visibility())); } diff --git a/src/gpu/glsl/GrGLSLShaderBuilder.h b/src/gpu/glsl/GrGLSLShaderBuilder.h index cfddbfff15..b13773b8a9 100644 --- a/src/gpu/glsl/GrGLSLShaderBuilder.h +++ b/src/gpu/glsl/GrGLSLShaderBuilder.h @@ -169,7 +169,6 @@ protected: kFragCoordConventions_GLSLPrivateFeature, kBlendEquationAdvanced_GLSLPrivateFeature, kBlendFuncExtended_GLSLPrivateFeature, - kExternalTexture_GLSLPrivateFeature, kTexelBuffer_GLSLPrivateFeature, kFramebufferFetch_GLSLPrivateFeature, kNoPerspectiveInterpolation_GLSLPrivateFeature, diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp index 0ee0afa6a6..bcf45ba7be 100644 --- a/src/sksl/SkSLGLSLCodeGenerator.cpp +++ b/src/sksl/SkSLGLSLCodeGenerator.cpp @@ -1083,6 +1083,14 @@ void GLSLCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, bool g } fFoundImageDecl = true; } + if (!fFoundExternalSamplerDecl && var.fVar->fType == *fContext.fSamplerExternalOES_Type) { + if (fProgram.fSettings.fCaps->externalTextureExtensionString()) { + fHeader.writeText("#extension "); + fHeader.writeText(fProgram.fSettings.fCaps->externalTextureExtensionString()); + fHeader.writeText(" : require\n"); + } + fFoundExternalSamplerDecl = true; + } } if (wroteType) { this->write(";"); diff --git a/src/sksl/SkSLGLSLCodeGenerator.h b/src/sksl/SkSLGLSLCodeGenerator.h index 2b308e3702..362ae7ca18 100644 --- a/src/sksl/SkSLGLSLCodeGenerator.h +++ b/src/sksl/SkSLGLSLCodeGenerator.h @@ -209,6 +209,7 @@ protected: // true if we have run into usages of dFdx / dFdy bool fFoundDerivatives = false; bool fFoundImageDecl = false; + bool fFoundExternalSamplerDecl = false; bool fFoundGSInvocations = false; bool fSetupFragPositionGlobal = false; bool fSetupFragPositionLocal = false; diff --git a/src/sksl/SkSLUtil.h b/src/sksl/SkSLUtil.h index 78a80736b8..dc87246605 100644 --- a/src/sksl/SkSLUtil.h +++ b/src/sksl/SkSLUtil.h @@ -151,6 +151,10 @@ public: return nullptr; } + const char* externalTextureExtensionString() const { + return nullptr; + } + const char* versionDeclString() const { return ""; } |