From cb7ba1eafce89a2f90239a7be56050fa98a47b9f Mon Sep 17 00:00:00 2001 From: egdaniel Date: Mon, 26 Oct 2015 08:38:25 -0700 Subject: Make appending default precision be controled by GLSL BUG=skia: Review URL: https://codereview.chromium.org/1403373012 --- src/gpu/gl/GrGLGLSL.cpp | 18 ------------------ src/gpu/gl/GrGLGLSL.h | 5 ----- src/gpu/gl/GrGLGpu.cpp | 6 ++++-- src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp | 11 +++++------ src/gpu/glsl/GrGLSL.cpp | 21 +++++++++++++++++++++ src/gpu/glsl/GrGLSL.h | 9 +++++++++ 6 files changed, 39 insertions(+), 31 deletions(-) (limited to 'src/gpu') diff --git a/src/gpu/gl/GrGLGLSL.cpp b/src/gpu/gl/GrGLGLSL.cpp index 4d2bf9794b..98a2386161 100755 --- a/src/gpu/gl/GrGLGLSL.cpp +++ b/src/gpu/gl/GrGLGLSL.cpp @@ -48,21 +48,3 @@ bool GrGLGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation } } -void GrGLAppendGLSLDefaultFloatPrecisionDeclaration(GrSLPrecision p, GrGLStandard s, SkString* out) { - // Desktop GLSL has added precision qualifiers but they don't do anything. - if (kGLES_GrGLStandard == s) { - switch (p) { - case kHigh_GrSLPrecision: - out->append("precision highp float;\n"); - break; - case kMedium_GrSLPrecision: - out->append("precision mediump float;\n"); - break; - case kLow_GrSLPrecision: - out->append("precision lowp float;\n"); - break; - default: - SkFAIL("Unknown precision value."); - } - } -} diff --git a/src/gpu/gl/GrGLGLSL.h b/src/gpu/gl/GrGLGLSL.h index fa2b6ae153..31e2de7d74 100755 --- a/src/gpu/gl/GrGLGLSL.h +++ b/src/gpu/gl/GrGLGLSL.h @@ -21,10 +21,5 @@ class GrGLContextInfo; */ bool GrGLGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation); -/** - * Adds a line of GLSL code to declare the default precision for float types. - */ -void GrGLAppendGLSLDefaultFloatPrecisionDeclaration(GrSLPrecision, GrGLStandard, SkString* out); - #endif diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index ce02fe8ea9..feeac933dd 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -18,6 +18,7 @@ #include "GrTypes.h" #include "GrVertices.h" #include "builders/GrGLShaderStringBuilder.h" +#include "glsl/GrGLSL.h" #include "glsl/GrGLSLCaps.h" #include "SkStrokeRec.h" #include "SkTemplates.h" @@ -2952,8 +2953,9 @@ void GrGLGpu::createCopyProgram() { ); SkString fshaderTxt(version); - GrGLAppendGLSLDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, this->glStandard(), - &fshaderTxt); + GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, + *this->glCaps().glslCaps(), + &fshaderTxt); vTexCoord.setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); vTexCoord.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); fshaderTxt.append(";"); diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp index d31482a4bb..73098547a8 100644 --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp @@ -8,7 +8,7 @@ #include "GrGLFragmentShaderBuilder.h" #include "GrGLProgramBuilder.h" #include "gl/GrGLGpu.h" -#include "gl/GrGLGLSL.h" +#include "glsl/GrGLSL.h" #include "glsl/GrGLSLCaps.h" #define GL_CALL(X) GR_GL_CALL(fProgramBuilder->gpu()->glInterface(), X) @@ -267,17 +267,16 @@ const char* GrGLFragmentShaderBuilder::getSecondaryColorOutputName() const { bool GrGLFragmentShaderBuilder::compileAndAttachShaders(GrGLuint programId, SkTDArray* shaderIds) { - GrGLGpu* gpu = fProgramBuilder->gpu(); this->versionDecl() = fProgramBuilder->glslCaps()->versionDeclString(); - GrGLAppendGLSLDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, - gpu->glStandard(), - &this->precisionQualifier()); + GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, + *fProgramBuilder->glslCaps(), + &this->precisionQualifier()); this->compileAndAppendLayoutQualifiers(); fProgramBuilder->appendUniformDecls(GrGLProgramBuilder::kFragment_Visibility, &this->uniforms()); this->appendDecls(fInputs, &this->inputs()); // We shouldn't have declared outputs on 1.10 - SkASSERT(k110_GrGLSLGeneration != gpu->glslGeneration() || fOutputs.empty()); + SkASSERT(k110_GrGLSLGeneration != fProgramBuilder->gpu()->glslGeneration() || fOutputs.empty()); this->appendDecls(fOutputs, &this->outputs()); return this->finalize(programId, GR_GL_FRAGMENT_SHADER, shaderIds); } diff --git a/src/gpu/glsl/GrGLSL.cpp b/src/gpu/glsl/GrGLSL.cpp index c77b7fab20..2de81ddd60 100644 --- a/src/gpu/glsl/GrGLSL.cpp +++ b/src/gpu/glsl/GrGLSL.cpp @@ -6,6 +6,7 @@ */ #include "GrGLSL.h" +#include "GrGLSLCaps.h" #include "SkString.h" bool GrGLSLSupportsNamedFragmentShaderOutputs(GrGLSLGeneration gen) { @@ -22,6 +23,26 @@ bool GrGLSLSupportsNamedFragmentShaderOutputs(GrGLSLGeneration gen) { return false; } +void GrGLSLAppendDefaultFloatPrecisionDeclaration(GrSLPrecision p, + const GrGLSLCaps& glslCaps, + SkString* out) { + if (glslCaps.usesPrecisionModifiers()) { + switch (p) { + case kHigh_GrSLPrecision: + out->append("precision highp float;\n"); + break; + case kMedium_GrSLPrecision: + out->append("precision mediump float;\n"); + break; + case kLow_GrSLPrecision: + out->append("precision lowp float;\n"); + break; + default: + SkFAIL("Unknown precision value."); + } + } +} + void GrGLSLMulVarBy4f(SkString* outAppend, const char* vec4VarName, const GrGLSLExpr4& mulFactor) { if (mulFactor.isOnes()) { *outAppend = SkString(); diff --git a/src/gpu/glsl/GrGLSL.h b/src/gpu/glsl/GrGLSL.h index 87b3d2daa4..a39f104fab 100644 --- a/src/gpu/glsl/GrGLSL.h +++ b/src/gpu/glsl/GrGLSL.h @@ -11,6 +11,8 @@ #include "GrTypesPriv.h" #include "SkString.h" +class GrGLSLCaps; + // Limited set of GLSL versions we build shaders for. Caller should round // down the GLSL version to one of these enums. enum GrGLSLGeneration { @@ -55,6 +57,13 @@ inline const char* GrGLSLTexture2DFunctionName(GrSLType coordType, GrGLSLGenerat } } +/** + * Adds a line of GLSL code to declare the default precision for float types. + */ +void GrGLSLAppendDefaultFloatPrecisionDeclaration(GrSLPrecision, + const GrGLSLCaps& glslCaps, + SkString* out); + /** * Converts a GrSLType to a string containing the name of the equivalent GLSL type. */ -- cgit v1.2.3