| Index: bench/GLBench.cpp
|
| diff --git a/bench/GLBench.cpp b/bench/GLBench.cpp
|
| index 8cf41c205665100d173201a0925bd8fe4a154b0a..b6975508cfe7335b4bc4e5743348b181d80aaf50 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());
|
|
|