| Index: src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
|
| diff --git a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
|
| index 087bd4723e44e5716bda8da5bd3ee80cd09d01be..7c430b4b738c82eee2c0adb496bb3a826d28dac6 100644
|
| --- a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
|
| +++ b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
|
| @@ -622,12 +622,14 @@ GrGLvoid GR_GL_FUNCTION_TYPE debugGLDeleteBuffers(GrGLsizei n, const GrGLuint* i
|
| }
|
|
|
| // map a buffer to the caller's address space
|
| -GrGLvoid* GR_GL_FUNCTION_TYPE debugGLMapBuffer(GrGLenum target, GrGLenum access) {
|
| -
|
| +GrGLvoid* GR_GL_FUNCTION_TYPE debugGLMapBufferRange(GrGLenum target, GrGLintptr offset,
|
| + GrGLsizeiptr length, GrGLbitfield access) {
|
| GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target ||
|
| GR_GL_ELEMENT_ARRAY_BUFFER == target);
|
| - // GR_GL_READ_ONLY == access || || GR_GL_READ_WRIT == access);
|
| - GrAlwaysAssert(GR_GL_WRITE_ONLY == access);
|
| +
|
| + // We only expect read access and we expect that the buffer or range is always invalidated.
|
| + GrAlwaysAssert(!SkToBool(GR_GL_MAP_READ_BIT & access));
|
| + GrAlwaysAssert((GR_GL_MAP_INVALIDATE_BUFFER_BIT | GR_GL_MAP_INVALIDATE_RANGE_BIT) & access);
|
|
|
| GrBufferObj *buffer = NULL;
|
| switch (target) {
|
| @@ -638,20 +640,41 @@ GrGLvoid* GR_GL_FUNCTION_TYPE debugGLMapBuffer(GrGLenum target, GrGLenum access)
|
| buffer = GrDebugGL::getInstance()->getElementArrayBuffer();
|
| break;
|
| default:
|
| - SkFAIL("Unexpected target to glMapBuffer");
|
| + SkFAIL("Unexpected target to glMapBufferRange");
|
| break;
|
| }
|
|
|
| - if (buffer) {
|
| + if (NULL != buffer) {
|
| + GrAlwaysAssert(offset >= 0 && offset + length <= buffer->getSize());
|
| GrAlwaysAssert(!buffer->getMapped());
|
| - buffer->setMapped();
|
| - return buffer->getDataPtr();
|
| + buffer->setMapped(offset, length);
|
| + return buffer->getDataPtr() + offset;
|
| }
|
|
|
| GrAlwaysAssert(false);
|
| return NULL; // no buffer bound to the target
|
| }
|
|
|
| +GrGLvoid* GR_GL_FUNCTION_TYPE debugGLMapBuffer(GrGLenum target, GrGLenum access) {
|
| + GrAlwaysAssert(GR_GL_WRITE_ONLY == access);
|
| +
|
| + GrBufferObj *buffer = NULL;
|
| + switch (target) {
|
| + case GR_GL_ARRAY_BUFFER:
|
| + buffer = GrDebugGL::getInstance()->getArrayBuffer();
|
| + break;
|
| + case GR_GL_ELEMENT_ARRAY_BUFFER:
|
| + buffer = GrDebugGL::getInstance()->getElementArrayBuffer();
|
| + break;
|
| + default:
|
| + SkFAIL("Unexpected target to glMapBuffer");
|
| + break;
|
| + }
|
| +
|
| + return debugGLMapBufferRange(target, 0, buffer->getSize(),
|
| + GR_GL_MAP_WRITE_BIT | GR_GL_MAP_INVALIDATE_BUFFER_BIT);
|
| +}
|
| +
|
| // remove a buffer from the caller's address space
|
| // TODO: check if the "access" method from "glMapBuffer" was honored
|
| GrGLboolean GR_GL_FUNCTION_TYPE debugGLUnmapBuffer(GrGLenum target) {
|
| @@ -672,7 +695,7 @@ GrGLboolean GR_GL_FUNCTION_TYPE debugGLUnmapBuffer(GrGLenum target) {
|
| break;
|
| }
|
|
|
| - if (buffer) {
|
| + if (NULL != buffer) {
|
| GrAlwaysAssert(buffer->getMapped());
|
| buffer->resetMapped();
|
| return GR_GL_TRUE;
|
| @@ -682,6 +705,34 @@ GrGLboolean GR_GL_FUNCTION_TYPE debugGLUnmapBuffer(GrGLenum target) {
|
| return GR_GL_FALSE; // GR_GL_INVALID_OPERATION;
|
| }
|
|
|
| +GrGLvoid GR_GL_FUNCTION_TYPE debugGLFlushMappedBufferRange(GrGLenum target,
|
| + GrGLintptr offset,
|
| + GrGLsizeiptr length) {
|
| + GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target ||
|
| + GR_GL_ELEMENT_ARRAY_BUFFER == target);
|
| +
|
| + GrBufferObj *buffer = NULL;
|
| + switch (target) {
|
| + case GR_GL_ARRAY_BUFFER:
|
| + buffer = GrDebugGL::getInstance()->getArrayBuffer();
|
| + break;
|
| + case GR_GL_ELEMENT_ARRAY_BUFFER:
|
| + buffer = GrDebugGL::getInstance()->getElementArrayBuffer();
|
| + break;
|
| + default:
|
| + SkFAIL("Unexpected target to glUnmapBuffer");
|
| + break;
|
| + }
|
| +
|
| + if (NULL != buffer) {
|
| + GrAlwaysAssert(buffer->getMapped());
|
| + GrAlwaysAssert(offset >= 0 && (offset + length) <= buffer->getMappedLength());
|
| + } else {
|
| + GrAlwaysAssert(false);
|
| + }
|
| +}
|
| +
|
| +
|
| GrGLvoid GR_GL_FUNCTION_TYPE debugGLGetBufferParameteriv(GrGLenum target,
|
| GrGLenum value,
|
| GrGLint* params) {
|
| @@ -706,17 +757,17 @@ GrGLvoid GR_GL_FUNCTION_TYPE debugGLGetBufferParameteriv(GrGLenum target,
|
| switch (value) {
|
| case GR_GL_BUFFER_MAPPED:
|
| *params = GR_GL_FALSE;
|
| - if (buffer)
|
| + if (NULL != buffer)
|
| *params = buffer->getMapped() ? GR_GL_TRUE : GR_GL_FALSE;
|
| break;
|
| case GR_GL_BUFFER_SIZE:
|
| *params = 0;
|
| - if (buffer)
|
| + if (NULL != buffer)
|
| *params = SkToInt(buffer->getSize());
|
| break;
|
| case GR_GL_BUFFER_USAGE:
|
| *params = GR_GL_STATIC_DRAW;
|
| - if (buffer)
|
| + if (NULL != buffer)
|
| *params = buffer->getUsage();
|
| break;
|
| default:
|
| @@ -826,6 +877,7 @@ const GrGLInterface* GrGLCreateDebugInterface() {
|
| functions->fEndQuery = noOpGLEndQuery;
|
| functions->fFinish = noOpGLFinish;
|
| functions->fFlush = noOpGLFlush;
|
| + functions->fFlushMappedBufferRange = debugGLFlushMappedBufferRange;
|
| functions->fFrontFace = noOpGLFrontFace;
|
| functions->fGenerateMipmap = debugGLGenerateMipmap;
|
| functions->fGenBuffers = debugGLGenBuffers;
|
| @@ -850,6 +902,8 @@ const GrGLInterface* GrGLCreateDebugInterface() {
|
| functions->fGenVertexArrays = debugGLGenVertexArrays;
|
| functions->fLineWidth = noOpGLLineWidth;
|
| functions->fLinkProgram = noOpGLLinkProgram;
|
| + functions->fMapBuffer = debugGLMapBuffer;
|
| + functions->fMapBufferRange = debugGLMapBufferRange;
|
| functions->fPixelStorei = debugGLPixelStorei;
|
| functions->fQueryCounter = noOpGLQueryCounter;
|
| functions->fReadBuffer = noOpGLReadBuffer;
|
| @@ -887,6 +941,7 @@ const GrGLInterface* GrGLCreateDebugInterface() {
|
| functions->fUniformMatrix2fv = noOpGLUniformMatrix2fv;
|
| functions->fUniformMatrix3fv = noOpGLUniformMatrix3fv;
|
| functions->fUniformMatrix4fv = noOpGLUniformMatrix4fv;
|
| + functions->fUnmapBuffer = debugGLUnmapBuffer;
|
| functions->fUseProgram = debugGLUseProgram;
|
| functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv;
|
| functions->fVertexAttribPointer = noOpGLVertexAttribPointer;
|
| @@ -909,10 +964,9 @@ const GrGLInterface* GrGLCreateDebugInterface() {
|
| functions->fBlitFramebuffer = noOpGLBlitFramebuffer;
|
| functions->fResolveMultisampleFramebuffer =
|
| noOpGLResolveMultisampleFramebuffer;
|
| - functions->fMapBuffer = debugGLMapBuffer;
|
| functions->fMatrixLoadf = noOpGLMatrixLoadf;
|
| functions->fMatrixLoadIdentity = noOpGLMatrixLoadIdentity;
|
| - functions->fUnmapBuffer = debugGLUnmapBuffer;
|
| +
|
| functions->fBindFragDataLocationIndexed =
|
| noOpGLBindFragDataLocationIndexed;
|
|
|
|
|