diff options
Diffstat (limited to 'chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp')
-rw-r--r-- | chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp | 361 |
1 files changed, 203 insertions, 158 deletions
diff --git a/chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp index 1a0e7accf2c..788179cd845 100644 --- a/chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp +++ b/chromium/third_party/skia/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp @@ -32,13 +32,6 @@ GrGLvoid GR_GL_FUNCTION_TYPE debugGLActiveTexture(GrGLenum texture) { GrDebugGL::getInstance()->setCurTextureUnit(texture); } -GrGLvoid GR_GL_FUNCTION_TYPE debugGLClientActiveTexture(GrGLenum texture) { - - // Ganesh offsets the texture unit indices - texture -= GR_GL_TEXTURE0; - GrAlwaysAssert(texture < GrDebugGL::getInstance()->getMaxTextureUnits()); -} - //////////////////////////////////////////////////////////////////////////////// GrGLvoid GR_GL_FUNCTION_TYPE debugGLAttachShader(GrGLuint programID, GrGLuint shaderID) { @@ -100,7 +93,7 @@ GrGLvoid GR_GL_FUNCTION_TYPE debugGLBufferData(GrGLenum target, buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); break; default: - GrCrash("Unexpected target to glBufferData"); + SkFAIL("Unexpected target to glBufferData"); break; } @@ -593,7 +586,7 @@ GrGLvoid GR_GL_FUNCTION_TYPE debugGLBindBuffer(GrGLenum target, GrGLuint bufferI GrDebugGL::getInstance()->setElementArrayBuffer(buffer); break; default: - GrCrash("Unexpected target to glBindBuffer"); + SkFAIL("Unexpected target to glBindBuffer"); break; } } @@ -629,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) { @@ -645,20 +640,41 @@ GrGLvoid* GR_GL_FUNCTION_TYPE debugGLMapBuffer(GrGLenum target, GrGLenum access) buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); break; default: - GrCrash("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) { @@ -675,11 +691,11 @@ GrGLboolean GR_GL_FUNCTION_TYPE debugGLUnmapBuffer(GrGLenum target) { buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); break; default: - GrCrash("Unexpected target to glUnmapBuffer"); + SkFAIL("Unexpected target to glUnmapBuffer"); break; } - if (buffer) { + if (NULL != buffer) { GrAlwaysAssert(buffer->getMapped()); buffer->resetMapped(); return GR_GL_TRUE; @@ -689,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) { @@ -713,21 +757,21 @@ 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) - *params = buffer->getSize(); + 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: - GrCrash("Unexpected value to glGetBufferParamateriv"); + SkFAIL("Unexpected value to glGetBufferParamateriv"); break; } }; @@ -790,144 +834,145 @@ private: const GrGLInterface* GrGLCreateDebugInterface() { GrGLInterface* interface = SkNEW(GrDebugGLInterface); - interface->fBindingsExported = kDesktop_GrGLBinding; - interface->fActiveTexture = debugGLActiveTexture; - interface->fAttachShader = debugGLAttachShader; - interface->fBeginQuery = debugGLBeginQuery; - interface->fBindAttribLocation = debugGLBindAttribLocation; - interface->fBindBuffer = debugGLBindBuffer; - interface->fBindFragDataLocation = noOpGLBindFragDataLocation; - interface->fBindTexture = debugGLBindTexture; - interface->fBindVertexArray = debugGLBindVertexArray; - interface->fBlendColor = noOpGLBlendColor; - interface->fBlendFunc = noOpGLBlendFunc; - interface->fBufferData = debugGLBufferData; - interface->fBufferSubData = noOpGLBufferSubData; - interface->fClear = noOpGLClear; - interface->fClearColor = noOpGLClearColor; - interface->fClearStencil = noOpGLClearStencil; - interface->fClientActiveTexture = debugGLClientActiveTexture; - interface->fColorMask = noOpGLColorMask; - interface->fCompileShader = noOpGLCompileShader; - interface->fCompressedTexImage2D = noOpGLCompressedTexImage2D; - interface->fCopyTexSubImage2D = noOpGLCopyTexSubImage2D; - interface->fCreateProgram = debugGLCreateProgram; - interface->fCreateShader = debugGLCreateShader; - interface->fCullFace = noOpGLCullFace; - interface->fDeleteBuffers = debugGLDeleteBuffers; - interface->fDeleteProgram = debugGLDeleteProgram; - interface->fDeleteQueries = noOpGLDeleteIds; - interface->fDeleteShader = debugGLDeleteShader; - interface->fDeleteTextures = debugGLDeleteTextures; - interface->fDeleteVertexArrays = debugGLDeleteVertexArrays; - interface->fDepthMask = noOpGLDepthMask; - interface->fDisable = noOpGLDisable; - interface->fDisableClientState = noOpGLDisableClientState; - interface->fDisableVertexAttribArray = noOpGLDisableVertexAttribArray; - interface->fDrawArrays = noOpGLDrawArrays; - interface->fDrawBuffer = noOpGLDrawBuffer; - interface->fDrawBuffers = noOpGLDrawBuffers; - interface->fDrawElements = noOpGLDrawElements; - interface->fEnable = noOpGLEnable; - interface->fEnableClientState = noOpGLEnableClientState; - interface->fEnableVertexAttribArray = noOpGLEnableVertexAttribArray; - interface->fEndQuery = noOpGLEndQuery; - interface->fFinish = noOpGLFinish; - interface->fFlush = noOpGLFlush; - interface->fFrontFace = noOpGLFrontFace; - interface->fGenerateMipmap = debugGLGenerateMipmap; - interface->fGenBuffers = debugGLGenBuffers; - interface->fGenQueries = noOpGLGenIds; - interface->fGenTextures = debugGLGenTextures; - interface->fGetBufferParameteriv = debugGLGetBufferParameteriv; - interface->fGetError = noOpGLGetError; - interface->fGetIntegerv = noOpGLGetIntegerv; - interface->fGetQueryObjecti64v = noOpGLGetQueryObjecti64v; - interface->fGetQueryObjectiv = noOpGLGetQueryObjectiv; - interface->fGetQueryObjectui64v = noOpGLGetQueryObjectui64v; - interface->fGetQueryObjectuiv = noOpGLGetQueryObjectuiv; - interface->fGetQueryiv = noOpGLGetQueryiv; - interface->fGetProgramInfoLog = noOpGLGetInfoLog; - interface->fGetProgramiv = noOpGLGetShaderOrProgramiv; - interface->fGetShaderInfoLog = noOpGLGetInfoLog; - interface->fGetShaderiv = noOpGLGetShaderOrProgramiv; - interface->fGetString = noOpGLGetString; - interface->fGetStringi = noOpGLGetStringi; - interface->fGetTexLevelParameteriv = noOpGLGetTexLevelParameteriv; - interface->fGetUniformLocation = noOpGLGetUniformLocation; - interface->fGenVertexArrays = debugGLGenVertexArrays; - interface->fLoadIdentity = noOpGLLoadIdentity; - interface->fLoadMatrixf = noOpGLLoadMatrixf; - interface->fLineWidth = noOpGLLineWidth; - interface->fLinkProgram = noOpGLLinkProgram; - interface->fMatrixMode = noOpGLMatrixMode; - interface->fPixelStorei = debugGLPixelStorei; - interface->fQueryCounter = noOpGLQueryCounter; - interface->fReadBuffer = noOpGLReadBuffer; - interface->fReadPixels = debugGLReadPixels; - interface->fScissor = noOpGLScissor; - interface->fShaderSource = noOpGLShaderSource; - interface->fStencilFunc = noOpGLStencilFunc; - interface->fStencilFuncSeparate = noOpGLStencilFuncSeparate; - interface->fStencilMask = noOpGLStencilMask; - interface->fStencilMaskSeparate = noOpGLStencilMaskSeparate; - interface->fStencilOp = noOpGLStencilOp; - interface->fStencilOpSeparate = noOpGLStencilOpSeparate; - interface->fTexGenf = noOpGLTexGenf; - interface->fTexGenfv = noOpGLTexGenfv; - interface->fTexGeni = noOpGLTexGeni; - interface->fTexImage2D = noOpGLTexImage2D; - interface->fTexParameteri = noOpGLTexParameteri; - interface->fTexParameteriv = noOpGLTexParameteriv; - interface->fTexSubImage2D = noOpGLTexSubImage2D; - interface->fTexStorage2D = noOpGLTexStorage2D; - interface->fDiscardFramebuffer = noOpGLDiscardFramebuffer; - interface->fUniform1f = noOpGLUniform1f; - interface->fUniform1i = noOpGLUniform1i; - interface->fUniform1fv = noOpGLUniform1fv; - interface->fUniform1iv = noOpGLUniform1iv; - interface->fUniform2f = noOpGLUniform2f; - interface->fUniform2i = noOpGLUniform2i; - interface->fUniform2fv = noOpGLUniform2fv; - interface->fUniform2iv = noOpGLUniform2iv; - interface->fUniform3f = noOpGLUniform3f; - interface->fUniform3i = noOpGLUniform3i; - interface->fUniform3fv = noOpGLUniform3fv; - interface->fUniform3iv = noOpGLUniform3iv; - interface->fUniform4f = noOpGLUniform4f; - interface->fUniform4i = noOpGLUniform4i; - interface->fUniform4fv = noOpGLUniform4fv; - interface->fUniform4iv = noOpGLUniform4iv; - interface->fUniformMatrix2fv = noOpGLUniformMatrix2fv; - interface->fUniformMatrix3fv = noOpGLUniformMatrix3fv; - interface->fUniformMatrix4fv = noOpGLUniformMatrix4fv; - interface->fUseProgram = debugGLUseProgram; - interface->fVertexAttrib4fv = noOpGLVertexAttrib4fv; - interface->fVertexAttribPointer = noOpGLVertexAttribPointer; - interface->fVertexPointer = noOpGLVertexPointer; - interface->fViewport = noOpGLViewport; - interface->fBindFramebuffer = debugGLBindFramebuffer; - interface->fBindRenderbuffer = debugGLBindRenderbuffer; - interface->fCheckFramebufferStatus = noOpGLCheckFramebufferStatus; - interface->fDeleteFramebuffers = debugGLDeleteFramebuffers; - interface->fDeleteRenderbuffers = debugGLDeleteRenderbuffers; - interface->fFramebufferRenderbuffer = debugGLFramebufferRenderbuffer; - interface->fFramebufferTexture2D = debugGLFramebufferTexture2D; - interface->fGenFramebuffers = debugGLGenFramebuffers; - interface->fGenRenderbuffers = debugGLGenRenderbuffers; - interface->fGetFramebufferAttachmentParameteriv = + interface->fStandard = kGL_GrGLStandard; + + GrGLInterface::Functions* functions = &interface->fFunctions; + functions->fActiveTexture = debugGLActiveTexture; + functions->fAttachShader = debugGLAttachShader; + functions->fBeginQuery = debugGLBeginQuery; + functions->fBindAttribLocation = debugGLBindAttribLocation; + functions->fBindBuffer = debugGLBindBuffer; + functions->fBindFragDataLocation = noOpGLBindFragDataLocation; + functions->fBindTexture = debugGLBindTexture; + functions->fBindVertexArray = debugGLBindVertexArray; + functions->fBlendColor = noOpGLBlendColor; + functions->fBlendFunc = noOpGLBlendFunc; + functions->fBufferData = debugGLBufferData; + functions->fBufferSubData = noOpGLBufferSubData; + functions->fClear = noOpGLClear; + functions->fClearColor = noOpGLClearColor; + functions->fClearStencil = noOpGLClearStencil; + functions->fColorMask = noOpGLColorMask; + functions->fCompileShader = noOpGLCompileShader; + functions->fCompressedTexImage2D = noOpGLCompressedTexImage2D; + functions->fCompressedTexSubImage2D = noOpGLCompressedTexSubImage2D; + functions->fCopyTexSubImage2D = noOpGLCopyTexSubImage2D; + functions->fCreateProgram = debugGLCreateProgram; + functions->fCreateShader = debugGLCreateShader; + functions->fCullFace = noOpGLCullFace; + functions->fDeleteBuffers = debugGLDeleteBuffers; + functions->fDeleteProgram = debugGLDeleteProgram; + functions->fDeleteQueries = noOpGLDeleteIds; + functions->fDeleteShader = debugGLDeleteShader; + functions->fDeleteTextures = debugGLDeleteTextures; + functions->fDeleteVertexArrays = debugGLDeleteVertexArrays; + functions->fDepthMask = noOpGLDepthMask; + functions->fDisable = noOpGLDisable; + functions->fDisableVertexAttribArray = noOpGLDisableVertexAttribArray; + functions->fDrawArrays = noOpGLDrawArrays; + functions->fDrawBuffer = noOpGLDrawBuffer; + functions->fDrawBuffers = noOpGLDrawBuffers; + functions->fDrawElements = noOpGLDrawElements; + functions->fEnable = noOpGLEnable; + functions->fEnableVertexAttribArray = noOpGLEnableVertexAttribArray; + functions->fEndQuery = noOpGLEndQuery; + functions->fFinish = noOpGLFinish; + functions->fFlush = noOpGLFlush; + functions->fFlushMappedBufferRange = debugGLFlushMappedBufferRange; + functions->fFrontFace = noOpGLFrontFace; + functions->fGenerateMipmap = debugGLGenerateMipmap; + functions->fGenBuffers = debugGLGenBuffers; + functions->fGenQueries = noOpGLGenIds; + functions->fGenTextures = debugGLGenTextures; + functions->fGetBufferParameteriv = debugGLGetBufferParameteriv; + functions->fGetError = noOpGLGetError; + functions->fGetIntegerv = noOpGLGetIntegerv; + functions->fGetQueryObjecti64v = noOpGLGetQueryObjecti64v; + functions->fGetQueryObjectiv = noOpGLGetQueryObjectiv; + functions->fGetQueryObjectui64v = noOpGLGetQueryObjectui64v; + functions->fGetQueryObjectuiv = noOpGLGetQueryObjectuiv; + functions->fGetQueryiv = noOpGLGetQueryiv; + functions->fGetProgramInfoLog = noOpGLGetInfoLog; + functions->fGetProgramiv = noOpGLGetShaderOrProgramiv; + functions->fGetShaderInfoLog = noOpGLGetInfoLog; + functions->fGetShaderiv = noOpGLGetShaderOrProgramiv; + functions->fGetString = noOpGLGetString; + functions->fGetStringi = noOpGLGetStringi; + functions->fGetTexLevelParameteriv = noOpGLGetTexLevelParameteriv; + functions->fGetUniformLocation = noOpGLGetUniformLocation; + functions->fGenVertexArrays = debugGLGenVertexArrays; + functions->fLineWidth = noOpGLLineWidth; + functions->fLinkProgram = noOpGLLinkProgram; + functions->fMapBuffer = debugGLMapBuffer; + functions->fMapBufferRange = debugGLMapBufferRange; + functions->fPixelStorei = debugGLPixelStorei; + functions->fQueryCounter = noOpGLQueryCounter; + functions->fReadBuffer = noOpGLReadBuffer; + functions->fReadPixels = debugGLReadPixels; + functions->fScissor = noOpGLScissor; + functions->fShaderSource = noOpGLShaderSource; + functions->fStencilFunc = noOpGLStencilFunc; + functions->fStencilFuncSeparate = noOpGLStencilFuncSeparate; + functions->fStencilMask = noOpGLStencilMask; + functions->fStencilMaskSeparate = noOpGLStencilMaskSeparate; + functions->fStencilOp = noOpGLStencilOp; + functions->fStencilOpSeparate = noOpGLStencilOpSeparate; + functions->fTexImage2D = noOpGLTexImage2D; + functions->fTexParameteri = noOpGLTexParameteri; + functions->fTexParameteriv = noOpGLTexParameteriv; + functions->fTexSubImage2D = noOpGLTexSubImage2D; + functions->fTexStorage2D = noOpGLTexStorage2D; + functions->fDiscardFramebuffer = noOpGLDiscardFramebuffer; + functions->fUniform1f = noOpGLUniform1f; + functions->fUniform1i = noOpGLUniform1i; + functions->fUniform1fv = noOpGLUniform1fv; + functions->fUniform1iv = noOpGLUniform1iv; + functions->fUniform2f = noOpGLUniform2f; + functions->fUniform2i = noOpGLUniform2i; + functions->fUniform2fv = noOpGLUniform2fv; + functions->fUniform2iv = noOpGLUniform2iv; + functions->fUniform3f = noOpGLUniform3f; + functions->fUniform3i = noOpGLUniform3i; + functions->fUniform3fv = noOpGLUniform3fv; + functions->fUniform3iv = noOpGLUniform3iv; + functions->fUniform4f = noOpGLUniform4f; + functions->fUniform4i = noOpGLUniform4i; + functions->fUniform4fv = noOpGLUniform4fv; + functions->fUniform4iv = noOpGLUniform4iv; + functions->fUniformMatrix2fv = noOpGLUniformMatrix2fv; + functions->fUniformMatrix3fv = noOpGLUniformMatrix3fv; + functions->fUniformMatrix4fv = noOpGLUniformMatrix4fv; + functions->fUnmapBuffer = debugGLUnmapBuffer; + functions->fUseProgram = debugGLUseProgram; + functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv; + functions->fVertexAttribPointer = noOpGLVertexAttribPointer; + functions->fViewport = noOpGLViewport; + functions->fBindFramebuffer = debugGLBindFramebuffer; + functions->fBindRenderbuffer = debugGLBindRenderbuffer; + functions->fCheckFramebufferStatus = noOpGLCheckFramebufferStatus; + functions->fDeleteFramebuffers = debugGLDeleteFramebuffers; + functions->fDeleteRenderbuffers = debugGLDeleteRenderbuffers; + functions->fFramebufferRenderbuffer = debugGLFramebufferRenderbuffer; + functions->fFramebufferTexture2D = debugGLFramebufferTexture2D; + functions->fGenFramebuffers = debugGLGenFramebuffers; + functions->fGenRenderbuffers = debugGLGenRenderbuffers; + functions->fGetFramebufferAttachmentParameteriv = noOpGLGetFramebufferAttachmentParameteriv; - interface->fGetRenderbufferParameteriv = noOpGLGetRenderbufferParameteriv; - interface->fRenderbufferStorage = noOpGLRenderbufferStorage; - interface->fRenderbufferStorageMultisample = + functions->fGetRenderbufferParameteriv = noOpGLGetRenderbufferParameteriv; + functions->fRenderbufferStorage = noOpGLRenderbufferStorage; + functions->fRenderbufferStorageMultisample = noOpGLRenderbufferStorageMultisample; - interface->fBlitFramebuffer = noOpGLBlitFramebuffer; - interface->fResolveMultisampleFramebuffer = + functions->fBlitFramebuffer = noOpGLBlitFramebuffer; + functions->fResolveMultisampleFramebuffer = noOpGLResolveMultisampleFramebuffer; - interface->fMapBuffer = debugGLMapBuffer; - interface->fUnmapBuffer = debugGLUnmapBuffer; - interface->fBindFragDataLocationIndexed = + functions->fMatrixLoadf = noOpGLMatrixLoadf; + functions->fMatrixLoadIdentity = noOpGLMatrixLoadIdentity; + + functions->fBindFragDataLocationIndexed = noOpGLBindFragDataLocationIndexed; + interface->fExtensions.init(kGL_GrGLStandard, functions->fGetString, functions->fGetStringi, + functions->fGetIntegerv); + return interface; } |