diff options
Diffstat (limited to 'bench/GLBench.cpp')
-rw-r--r-- | bench/GLBench.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/bench/GLBench.cpp b/bench/GLBench.cpp index 8cf41c2056..b6975508cf 100644 --- a/bench/GLBench.cpp +++ b/bench/GLBench.cpp @@ -11,7 +11,10 @@ #include "GrGpu.h" #include "GrTest.h" #include "gl/GrGLContext.h" +#include "gl/builders/GrGLShaderStringBuilder.h" +#include "SkSLCompiler.h" #include <stdio.h> +#include <string> const GrGLContext* GLBench::getGLContext(SkCanvas* canvas) { // This bench exclusively tests GL calls directly @@ -61,13 +64,26 @@ void GLBench::onDraw(int loops, SkCanvas* canvas) { canvas->getGrContext()->resetContext(); } -GrGLuint GLBench::CompileShader(const GrGLInterface* gl, const char* shaderSrc, GrGLenum type) { +GrGLuint GLBench::CompileShader(const GrGLContext* context, const char* sksl, GrGLenum type) { + const GrGLInterface* gl = context->interface(); + std::string glsl; + bool result = context->compiler()->toGLSL(type == GR_GL_VERTEX_SHADER + ? SkSL::Program::kVertex_Kind + : SkSL::Program::kFragment_Kind, + std::string(sksl), + GrGLSkSLCapsForContext(*context), + &glsl); + if (!result) { + SkDebugf("SkSL compilation failed:\n%s\n%s\n", sksl, + context->compiler()->errorText().c_str()); + } GrGLuint shader; // Create the shader object GR_GL_CALL_RET(gl, shader, CreateShader(type)); // Load the shader source - GR_GL_CALL(gl, ShaderSource(shader, 1, &shaderSrc, nullptr)); + const char* glslPtr = glsl.c_str(); + GR_GL_CALL(gl, ShaderSource(shader, 1, (const char**) &glslPtr, nullptr)); // Compile the shader GR_GL_CALL(gl, CompileShader(shader)); @@ -84,10 +100,11 @@ GrGLuint GLBench::CompileShader(const GrGLInterface* gl, const char* shaderSrc, return shader; } -GrGLuint GLBench::CreateProgram(const GrGLInterface* gl, const char* vshader, const char* fshader) { - - GrGLuint vertexShader = CompileShader(gl, vshader, GR_GL_VERTEX_SHADER); - GrGLuint fragmentShader = CompileShader(gl, fshader, GR_GL_FRAGMENT_SHADER); +GrGLuint GLBench::CreateProgram(const GrGLContext* context, const char* vshader, + const char* fshader) { + const GrGLInterface* gl = context->interface(); + GrGLuint vertexShader = CompileShader(context, vshader, GR_GL_VERTEX_SHADER); + GrGLuint fragmentShader = CompileShader(context, fshader, GR_GL_FRAGMENT_SHADER); GrGLuint shaderProgram; GR_GL_CALL_RET(gl, shaderProgram, CreateProgram()); |