Skip to content

Commit

Permalink
Make in-process Skia bindings work with GL ES 3.1
Browse files Browse the repository at this point in the history
The Nexus 10 has 3.1.  Just was missing one stub.

R=kbr@chromium.org

Review URL: https://codereview.chromium.org/942983002

Cr-Commit-Position: refs/heads/master@{#317405}
  • Loading branch information
eseidel authored and Commit bot committed Feb 20, 2015
1 parent 9f532ee commit b009786
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 0 deletions.
3 changes: 3 additions & 0 deletions ui/gl/generate_bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,9 @@
{ 'return_type': 'void',
'names': ['glGetProgramiv'],
'arguments': 'GLuint program, GLenum pname, GLint* params', },
{ 'return_type': 'GLint',
'names': ['glGetProgramResourceLocation'],
'arguments': 'GLuint program, GLenum programInterface, const char* name', },
{ 'return_type': 'void',
'versions': [{ 'name': 'glGetQueryiv' }],
'arguments': 'GLenum target, GLenum pname, GLint* params', },
Expand Down
3 changes: 3 additions & 0 deletions ui/gl/gl_bindings_api_autogen_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,9 @@ void glGetProgramInfoLogFn(GLuint program,
GLsizei* length,
char* infolog) override;
void glGetProgramivFn(GLuint program, GLenum pname, GLint* params) override;
GLint glGetProgramResourceLocationFn(GLuint program,
GLenum programInterface,
const char* name) override;
void glGetQueryivFn(GLenum target, GLenum pname, GLint* params) override;
void glGetQueryivARBFn(GLenum target, GLenum pname, GLint* params) override;
void glGetQueryObjecti64vFn(GLuint id, GLenum pname, GLint64* params) override;
Expand Down
53 changes: 53 additions & 0 deletions ui/gl/gl_bindings_autogen_gl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ void DriverGL::InitializeStaticBindings() {
GetGLProcAddress("glGetProgramInfoLog"));
fn.glGetProgramivFn =
reinterpret_cast<glGetProgramivProc>(GetGLProcAddress("glGetProgramiv"));
fn.glGetProgramResourceLocationFn = 0;
fn.glGetQueryivFn = 0;
fn.glGetQueryivARBFn = 0;
fn.glGetQueryObjecti64vFn = 0;
Expand Down Expand Up @@ -1273,6 +1274,14 @@ void DriverGL::InitializeDynamicBindings(GLContext* context) {
DCHECK(fn.glGetProgramBinaryFn);
}

debug_fn.glGetProgramResourceLocationFn = 0;
if (ver->IsAtLeastGL(4u, 3u) || ver->IsAtLeastGLES(3u, 1u)) {
fn.glGetProgramResourceLocationFn =
reinterpret_cast<glGetProgramResourceLocationProc>(
GetGLProcAddress("glGetProgramResourceLocation"));
DCHECK(fn.glGetProgramResourceLocationFn);
}

debug_fn.glGetQueryivFn = 0;
if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
fn.glGetQueryivFn =
Expand Down Expand Up @@ -3254,6 +3263,20 @@ Debug_glGetProgramiv(GLuint program, GLenum pname, GLint* params) {
g_driver_gl.debug_fn.glGetProgramivFn(program, pname, params);
}

static GLint GL_BINDING_CALL
Debug_glGetProgramResourceLocation(GLuint program,
GLenum programInterface,
const char* name) {
GL_SERVICE_LOG("glGetProgramResourceLocation"
<< "(" << program << ", "
<< GLEnums::GetStringEnum(programInterface) << ", " << name
<< ")");
GLint result = g_driver_gl.debug_fn.glGetProgramResourceLocationFn(
program, programInterface, name);
GL_SERVICE_LOG("GL_RESULT: " << result);
return result;
}

static void GL_BINDING_CALL
Debug_glGetQueryiv(GLenum target, GLenum pname, GLint* params) {
GL_SERVICE_LOG("glGetQueryiv"
Expand Down Expand Up @@ -5261,6 +5284,10 @@ void DriverGL::InitializeDebugBindings() {
debug_fn.glGetProgramivFn = fn.glGetProgramivFn;
fn.glGetProgramivFn = Debug_glGetProgramiv;
}
if (!debug_fn.glGetProgramResourceLocationFn) {
debug_fn.glGetProgramResourceLocationFn = fn.glGetProgramResourceLocationFn;
fn.glGetProgramResourceLocationFn = Debug_glGetProgramResourceLocation;
}
if (!debug_fn.glGetQueryivFn) {
debug_fn.glGetQueryivFn = fn.glGetQueryivFn;
fn.glGetQueryivFn = Debug_glGetQueryiv;
Expand Down Expand Up @@ -6674,6 +6701,13 @@ void GLApiBase::glGetProgramivFn(GLuint program, GLenum pname, GLint* params) {
driver_->fn.glGetProgramivFn(program, pname, params);
}

GLint GLApiBase::glGetProgramResourceLocationFn(GLuint program,
GLenum programInterface,
const char* name) {
return driver_->fn.glGetProgramResourceLocationFn(program, programInterface,
name);
}

void GLApiBase::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) {
driver_->fn.glGetQueryivFn(target, pname, params);
}
Expand Down Expand Up @@ -8478,6 +8512,15 @@ void TraceGLApi::glGetProgramivFn(GLuint program, GLenum pname, GLint* params) {
gl_api_->glGetProgramivFn(program, pname, params);
}

GLint TraceGLApi::glGetProgramResourceLocationFn(GLuint program,
GLenum programInterface,
const char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu",
"TraceGLAPI::glGetProgramResourceLocation")
return gl_api_->glGetProgramResourceLocationFn(program, programInterface,
name);
}

void TraceGLApi::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glGetQueryiv")
gl_api_->glGetQueryivFn(target, pname, params);
Expand Down Expand Up @@ -10570,6 +10613,16 @@ void NoContextGLApi::glGetProgramivFn(GLuint program,
LOG(ERROR) << "Trying to call glGetProgramiv() without current GL context";
}

GLint NoContextGLApi::glGetProgramResourceLocationFn(GLuint program,
GLenum programInterface,
const char* name) {
NOTREACHED() << "Trying to call glGetProgramResourceLocation() without "
"current GL context";
LOG(ERROR) << "Trying to call glGetProgramResourceLocation() without current "
"GL context";
return 0;
}

void NoContextGLApi::glGetQueryivFn(GLenum target,
GLenum pname,
GLint* params) {
Expand Down
10 changes: 10 additions & 0 deletions ui/gl/gl_bindings_autogen_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,10 @@ typedef void(GL_BINDING_CALL* glGetProgramInfoLogProc)(GLuint program,
typedef void(GL_BINDING_CALL* glGetProgramivProc)(GLuint program,
GLenum pname,
GLint* params);
typedef GLint(GL_BINDING_CALL* glGetProgramResourceLocationProc)(
GLuint program,
GLenum programInterface,
const char* name);
typedef void(GL_BINDING_CALL* glGetQueryivProc)(GLenum target,
GLenum pname,
GLint* params);
Expand Down Expand Up @@ -1074,6 +1078,7 @@ struct ProcsGL {
glGetProgramBinaryProc glGetProgramBinaryFn;
glGetProgramInfoLogProc glGetProgramInfoLogFn;
glGetProgramivProc glGetProgramivFn;
glGetProgramResourceLocationProc glGetProgramResourceLocationFn;
glGetQueryivProc glGetQueryivFn;
glGetQueryivARBProc glGetQueryivARBFn;
glGetQueryObjecti64vProc glGetQueryObjecti64vFn;
Expand Down Expand Up @@ -1582,6 +1587,9 @@ class GL_EXPORT GLApi {
virtual void glGetProgramivFn(GLuint program,
GLenum pname,
GLint* params) = 0;
virtual GLint glGetProgramResourceLocationFn(GLuint program,
GLenum programInterface,
const char* name) = 0;
virtual void glGetQueryivFn(GLenum target, GLenum pname, GLint* params) = 0;
virtual void glGetQueryivARBFn(GLenum target,
GLenum pname,
Expand Down Expand Up @@ -2185,6 +2193,8 @@ class GL_EXPORT GLApi {
#define glGetProgramBinary ::gfx::g_current_gl_context->glGetProgramBinaryFn
#define glGetProgramInfoLog ::gfx::g_current_gl_context->glGetProgramInfoLogFn
#define glGetProgramiv ::gfx::g_current_gl_context->glGetProgramivFn
#define glGetProgramResourceLocation \
::gfx::g_current_gl_context->glGetProgramResourceLocationFn
#define glGetQueryiv ::gfx::g_current_gl_context->glGetQueryivFn
#define glGetQueryivARB ::gfx::g_current_gl_context->glGetQueryivARBFn
#define glGetQueryObjecti64v ::gfx::g_current_gl_context->glGetQueryObjecti64vFn
Expand Down
11 changes: 11 additions & 0 deletions ui/gl/gl_bindings_autogen_mock.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,15 @@ void GL_BINDING_CALL MockGLInterface::Mock_glGetProgramInfoLog(GLuint program,
interface_->GetProgramInfoLog(program, bufsize, length, infolog);
}

GLint GL_BINDING_CALL
MockGLInterface::Mock_glGetProgramResourceLocation(GLuint program,
GLenum programInterface,
const char* name) {
MakeFunctionUnique("glGetProgramResourceLocation");
return interface_->GetProgramResourceLocation(program, programInterface,
name);
}

void GL_BINDING_CALL MockGLInterface::Mock_glGetProgramiv(GLuint program,
GLenum pname,
GLint* params) {
Expand Down Expand Up @@ -2866,6 +2875,8 @@ void* GL_BINDING_CALL MockGLInterface::GetGLProcAddress(const char* name) {
return reinterpret_cast<void*>(Mock_glGetProgramBinaryOES);
if (strcmp(name, "glGetProgramInfoLog") == 0)
return reinterpret_cast<void*>(Mock_glGetProgramInfoLog);
if (strcmp(name, "glGetProgramResourceLocation") == 0)
return reinterpret_cast<void*>(Mock_glGetProgramResourceLocation);
if (strcmp(name, "glGetProgramiv") == 0)
return reinterpret_cast<void*>(Mock_glGetProgramiv);
if (strcmp(name, "glGetQueryObjecti64v") == 0)
Expand Down
4 changes: 4 additions & 0 deletions ui/gl/gl_bindings_autogen_mock.h
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,10 @@ static void GL_BINDING_CALL Mock_glGetProgramInfoLog(GLuint program,
GLsizei bufsize,
GLsizei* length,
char* infolog);
static GLint GL_BINDING_CALL
Mock_glGetProgramResourceLocation(GLuint program,
GLenum programInterface,
const char* name);
static void GL_BINDING_CALL
Mock_glGetProgramiv(GLuint program, GLenum pname, GLint* params);
static void GL_BINDING_CALL
Expand Down
8 changes: 8 additions & 0 deletions ui/gl/gl_bindings_skia_in_process.cc
Original file line number Diff line number Diff line change
Expand Up @@ -617,6 +617,13 @@ GLvoid StubGLVertexAttribPointer(GLuint indx, GLint size, GLenum type,
GLvoid StubGLViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
glViewport(x, y, width, height);
}

GLint StubGLGetProgramResourceLocation(GLuint program,
GLenum programInterface,
const char* name) {
return glGetProgramResourceLocation(program, programInterface, name);
}

} // extern "C"
} // namespace

Expand Down Expand Up @@ -794,6 +801,7 @@ GrGLInterface* CreateInProcessSkiaGLBinding() {
functions->fUnmapBuffer = StubGLUnmapBuffer;
functions->fBindFragDataLocationIndexed =
StubGLBindFragDataLocationIndexed;
functions->fGetProgramResourceLocation = StubGLGetProgramResourceLocation;

return interface;
}
Expand Down
2 changes: 2 additions & 0 deletions ui/gl/gl_mock_autogen_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ MOCK_METHOD4(
GetProgramInfoLog,
void(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog));
MOCK_METHOD3(GetProgramiv, void(GLuint program, GLenum pname, GLint* params));
MOCK_METHOD3(GetProgramResourceLocation,
GLint(GLuint program, GLenum programInterface, const char* name));
MOCK_METHOD3(GetQueryiv, void(GLenum target, GLenum pname, GLint* params));
MOCK_METHOD3(GetQueryivARB, void(GLenum target, GLenum pname, GLint* params));
MOCK_METHOD3(GetQueryObjecti64v,
Expand Down

0 comments on commit b009786

Please sign in to comment.