From 365d2e90754a75275307cc46a986d4577401ddaf Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 8 Jan 2020 12:11:24 +0000 Subject: [PATCH] Detect when a zero-sized buffer is bound and skip GL draws --- renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp index dddb38ed1..e5890d6cd 100644 --- a/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_draw_funcs.cpp @@ -245,6 +245,24 @@ bool WrappedOpenGL::Check_SafeDraw(bool indexed) ret = false; } + + GLint size = 0; + GL.glGetNamedBufferParameterivEXT(vb, eGL_BUFFER_SIZE, &size); + + if(size == 0) + { + ResourceId id = GetResourceManager()->GetID(BufferRes(GetCtx(), vb)); + AddDebugMessage( + MessageCategory::Undefined, MessageSeverity::High, MessageSource::IncorrectAPIUse, + StringFormat::Fmt("Vertex buffer %s bound to attribute %d: %s (buffer slot %d) at " + "draw is 0-sized!\n" + "Has this buffer been initialised?", + ToStr(GetResourceManager()->GetOriginalID(id)).c_str(), attrib, + shaderDetails.reflection.inputSignature[reflIndex].varName.c_str(), + bufIdx)); + + ret = false; + } } } }