| Index: src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
|
| diff --git a/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp b/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
|
| index 04d90ee34311e8b3f5e3b0c6d0e0a7e1efe40a0f..d2e49a5cfb0b5716b988aa4d3aaec1d4a5451050 100644
|
| --- a/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
|
| +++ b/src/gpu/gl/builders/GrGLShaderStringBuilder.cpp
|
| @@ -9,8 +9,6 @@
|
| #include "gl/GrGLGpu.h"
|
| #include "gl/GrGLSLPrettyPrint.h"
|
| #include "SkTraceEvent.h"
|
| -#include "SkSLCompiler.h"
|
| -#include "ir/SkSLProgram.h"
|
|
|
| #define GL_CALL(X) GR_GL_CALL(gpu->glInterface(), X)
|
| #define GL_CALL_RET(R, X) GR_GL_CALL_RET(gpu->glInterface(), R, X)
|
| @@ -19,90 +17,6 @@
|
| static const bool c_PrintShaders{false};
|
|
|
| static void print_shader_source(const char** strings, int* lengths, int count);
|
| -
|
| -static SkSL::GLCaps skslcaps_for_context(const GrGLContext& context) {
|
| - GrGLStandard standard = context.standard();
|
| - const GrGLCaps* caps = context.caps();
|
| - const GrGLSLCaps* glslCaps = caps->glslCaps();
|
| - SkSL::GLCaps result;
|
| - switch (standard) {
|
| - case kGL_GrGLStandard:
|
| - result.fStandard = SkSL::GLCaps::kGL_Standard;
|
| - break;
|
| - case kGLES_GrGLStandard:
|
| - result.fStandard = SkSL::GLCaps::kGLES_Standard;
|
| - break;
|
| - default:
|
| - SkASSERT(false);
|
| - result.fStandard = SkSL::GLCaps::kGL_Standard;
|
| - }
|
| -
|
| - switch (glslCaps->generation()) {
|
| - case k110_GrGLSLGeneration:
|
| - if (kGLES_GrGLStandard == standard) {
|
| - // ES2's shader language is based on GLSL 1.20 but is version 1.00 of the ES
|
| - // language
|
| - result.fVersion = 100;
|
| - } else {
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 110;
|
| - }
|
| - break;
|
| - case k130_GrGLSLGeneration:
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 130;
|
| - break;
|
| - case k140_GrGLSLGeneration:
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 140;
|
| - break;
|
| - case k150_GrGLSLGeneration:
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 150;
|
| - break;
|
| - case k330_GrGLSLGeneration:
|
| - if (kGLES_GrGLStandard == standard) {
|
| - result.fVersion = 300;
|
| - } else {
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 330;
|
| - }
|
| - break;
|
| - case k400_GrGLSLGeneration:
|
| - SkASSERT(kGL_GrGLStandard == standard);
|
| - result.fVersion = 400;
|
| - break;
|
| - case k310es_GrGLSLGeneration:
|
| - SkASSERT(kGLES_GrGLStandard == standard);
|
| - result.fVersion = 310;
|
| - break;
|
| - case k320es_GrGLSLGeneration:
|
| - SkASSERT(kGLES_GrGLStandard == standard);
|
| - result.fVersion = 320;
|
| - break;
|
| - }
|
| - result.fIsCoreProfile = caps->isCoreProfile();
|
| - result.fUsesPrecisionModifiers = glslCaps->usesPrecisionModifiers();
|
| - result.fMustDeclareFragmentShaderOutput = glslCaps->mustDeclareFragmentShaderOutput();
|
| - result.fCanUseMinAndAbsTogether = glslCaps->canUseMinAndAbsTogether();
|
| - return result;
|
| -}
|
| -
|
| -static void dump_string(std::string s) {
|
| - // on Android, SkDebugf only displays the first 1K characters of output, which results in
|
| - // incomplete shader source code. Print each line individually to avoid this problem.
|
| - size_t index = 0;
|
| - for (;;) {
|
| - size_t next = s.find("\n", index);
|
| - if (next == std::string::npos) {
|
| - SkDebugf("%s", s.substr(index).c_str());
|
| - break;
|
| - } else {
|
| - SkDebugf("%s", s.substr(index, next - index + 1).c_str());
|
| - index = next + 1;
|
| - }
|
| - }
|
| -}
|
|
|
| GrGLuint GrGLCompileAndAttachShader(const GrGLContext& glCtx,
|
| GrGLuint programId,
|
| @@ -119,38 +33,14 @@
|
| return 0;
|
| }
|
|
|
| - std::string sksl;
|
| #ifdef SK_DEBUG
|
| SkString prettySource = GrGLSLPrettyPrint::PrettyPrintGLSL(strings, lengths, count, false);
|
| - sksl = std::string(prettySource.c_str());
|
| + const GrGLchar* sourceStr = prettySource.c_str();
|
| + GrGLint sourceLength = static_cast<GrGLint>(prettySource.size());
|
| + GR_GL_CALL(gli, ShaderSource(shaderId, 1, &sourceStr, &sourceLength));
|
| #else
|
| - for (int i = 0; i < count; i++) {
|
| - sksl.append(strings[i], lengths[i]);
|
| - }
|
| + GR_GL_CALL(gli, ShaderSource(shaderId, count, strings, lengths));
|
| #endif
|
| -
|
| - std::string glsl;
|
| - SkSL::Compiler& compiler = *glCtx.compiler();
|
| - SkSL::GLCaps caps = skslcaps_for_context(glCtx);
|
| - SkASSERT(type == GR_GL_VERTEX_SHADER || type == GR_GL_FRAGMENT_SHADER);
|
| - SkDEBUGCODE(bool result = )compiler.toGLSL(type == GR_GL_VERTEX_SHADER
|
| - ? SkSL::Program::kVertex_Kind
|
| - : SkSL::Program::kFragment_Kind,
|
| - std::string(sksl.c_str()),
|
| - caps,
|
| - &glsl);
|
| -#ifdef SK_DEBUG
|
| - if (!result) {
|
| - SkDebugf("SKSL compilation error\n----------------------\n");
|
| - SkDebugf("SKSL:\n");
|
| - dump_string(sksl);
|
| - SkDebugf("\nErrors:\n%s\n", compiler.errorText().c_str());
|
| - SkDEBUGFAIL("SKSL compilation failed!\n");
|
| - }
|
| -#endif
|
| - const char* glslChars = glsl.c_str();
|
| - GrGLint glslLength = (GrGLint) glsl.length();
|
| - GR_GL_CALL(gli, ShaderSource(shaderId, 1, &glslChars, &glslLength));
|
|
|
| // If tracing is enabled in chrome then we pretty print
|
| bool traceShader;
|
| @@ -182,14 +72,10 @@
|
| // buffer param validation.
|
| GrGLsizei length = GR_GL_INIT_ZERO;
|
| GR_GL_CALL(gli, GetShaderInfoLog(shaderId, infoLen+1, &length, (char*)log.get()));
|
| - SkDebugf("GLSL compilation error\n----------------------\n");
|
| - SkDebugf("SKSL:\n");
|
| - dump_string(sksl);
|
| - SkDebugf("GLSL:\n");
|
| - dump_string(glsl);
|
| - SkDebugf("Errors:\n%s\n", (const char*) log.get());
|
| + print_shader_source(strings, lengths, count);
|
| + SkDebugf("\n%s", (const char*)log.get());
|
| }
|
| - SkDEBUGFAIL("GLSL compilation failed!");
|
| + SkDEBUGFAIL("Shader compilation failed!");
|
| GR_GL_CALL(gli, DeleteShader(shaderId));
|
| return 0;
|
| }
|
|
|