mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-24 05:49:58 +00:00
More (disabled by default) gl error logging..
This commit is contained in:
parent
7e756544ee
commit
3f7474e5b8
@ -24,6 +24,7 @@ extern void bindDefaultFBO();
|
||||
GLuint g_defaultFBO = 0;
|
||||
|
||||
void GLQueueRunner::CreateDeviceObjects() {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
if (gl_extensions.EXT_texture_filter_anisotropic) {
|
||||
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropyLevel_);
|
||||
} else {
|
||||
@ -52,9 +53,11 @@ void GLQueueRunner::CreateDeviceObjects() {
|
||||
if (!gl_extensions.IsCoreContext) { // Not OK to query this in core profile!
|
||||
populate(GL_EXTENSIONS);
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
||||
void GLQueueRunner::DestroyDeviceObjects() {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
if (!nameCache_.empty()) {
|
||||
glDeleteTextures((GLsizei)nameCache_.size(), &nameCache_[0]);
|
||||
nameCache_.clear();
|
||||
@ -66,6 +69,7 @@ void GLQueueRunner::DestroyDeviceObjects() {
|
||||
readbackBufferSize_ = 0;
|
||||
delete[] tempBuffer_;
|
||||
tempBufferSize_ = 0;
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
||||
void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
@ -83,6 +87,7 @@ void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
glGenTextures(1, &tex->texture);
|
||||
glBindTexture(tex->target, tex->texture);
|
||||
boundTexture = tex->texture;
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRInitStepType::CREATE_BUFFER:
|
||||
@ -91,6 +96,7 @@ void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
glGenBuffers(1, &buffer->buffer);
|
||||
glBindBuffer(buffer->target_, buffer->buffer);
|
||||
glBufferData(buffer->target_, step.create_buffer.size, nullptr, step.create_buffer.usage);
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRInitStepType::BUFFER_SUBDATA:
|
||||
@ -100,6 +106,7 @@ void GLQueueRunner::RunInitSteps(const std::vector<GLRInitStep> &steps) {
|
||||
glBufferSubData(GL_ARRAY_BUFFER, step.buffer_subdata.offset, step.buffer_subdata.size, step.buffer_subdata.data);
|
||||
if (step.buffer_subdata.deleteData)
|
||||
delete[] step.buffer_subdata.data;
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRInitStepType::CREATE_PROGRAM:
|
||||
@ -432,6 +439,7 @@ void GLQueueRunner::InitCreateFramebuffer(const GLRInitStep &step) {
|
||||
}
|
||||
|
||||
void GLQueueRunner::RunSteps(const std::vector<GLRStep *> &steps) {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
for (size_t i = 0; i < steps.size(); i++) {
|
||||
const GLRStep &step = *steps[i];
|
||||
switch (step.stepType) {
|
||||
@ -456,6 +464,7 @@ void GLQueueRunner::RunSteps(const std::vector<GLRStep *> &steps) {
|
||||
}
|
||||
delete steps[i];
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
||||
void GLQueueRunner::LogSteps(const std::vector<GLRStep *> &steps) {
|
||||
@ -464,6 +473,7 @@ void GLQueueRunner::LogSteps(const std::vector<GLRStep *> &steps) {
|
||||
|
||||
|
||||
void GLQueueRunner::PerformBlit(const GLRStep &step) {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
// Without FBO_ARB / GLES3, this will collide with bind_for_read, but there's nothing
|
||||
// in ES 2.0 that actually separate them anyway of course, so doesn't matter.
|
||||
fbo_bind_fb_target(false, step.blit.dst->handle);
|
||||
@ -492,6 +502,7 @@ void GLQueueRunner::PerformBlit(const GLRStep &step) {
|
||||
}
|
||||
|
||||
void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
// Don't execute empty renderpasses.
|
||||
if (step.commands.empty()) {
|
||||
// Nothing to do.
|
||||
@ -583,6 +594,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
stencilEnabled = false;
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
case GLRRenderCommand::STENCILOP:
|
||||
glStencilOp(c.stencilOp.sFail, c.stencilOp.zFail, c.stencilOp.pass);
|
||||
@ -608,6 +620,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
glColorMask(c.blend.mask & 1, (c.blend.mask >> 1) & 1, (c.blend.mask >> 2) & 1, (c.blend.mask >> 3) & 1);
|
||||
colorMask = c.blend.mask;
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
case GLRRenderCommand::LOGICOP:
|
||||
#ifndef USING_GLES2
|
||||
@ -624,6 +637,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
logicEnabled = false;
|
||||
}
|
||||
#endif
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
case GLRRenderCommand::CLEAR:
|
||||
// Scissor test is on, and should be on after leaving this case. If we disable it,
|
||||
@ -656,6 +670,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
if (c.clear.scissorW == 0) {
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
case GLRRenderCommand::INVALIDATE:
|
||||
{
|
||||
@ -668,6 +683,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
if (c.clear.clearMask & GL_STENCIL_BUFFER_BIT)
|
||||
attachments[count++] = GL_STENCIL_BUFFER_BIT;
|
||||
glInvalidateFramebuffer(GL_FRAMEBUFFER, count, attachments);
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::BLENDCOLOR:
|
||||
@ -686,6 +702,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
#else
|
||||
glDepthRangef(c.viewport.vp.minZ, c.viewport.vp.maxZ);
|
||||
#endif
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::SCISSOR:
|
||||
@ -694,6 +711,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
if (!curFB_)
|
||||
y = curFBHeight_ - y - c.scissor.rc.h;
|
||||
glScissor(c.scissor.rc.x, y, c.scissor.rc.w, c.scissor.rc.h);
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::UNIFORM4F:
|
||||
@ -718,6 +736,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::UNIFORM4I:
|
||||
@ -742,6 +761,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::UNIFORMMATRIX:
|
||||
@ -753,6 +773,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
if (loc >= 0) {
|
||||
glUniformMatrix4fv(loc, 1, false, c.uniformMatrix4.m);
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::BINDTEXTURE:
|
||||
@ -798,6 +819,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
glUseProgram(c.program.program->program);
|
||||
curProgram = c.program.program;
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
}
|
||||
case GLRRenderCommand::BIND_VERTEX_BUFFER:
|
||||
@ -861,6 +883,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
} else {
|
||||
glDrawElementsInstanced(c.drawIndexed.mode, c.drawIndexed.count, c.drawIndexed.indexType, c.drawIndexed.indices, c.drawIndexed.instances);
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
case GLRRenderCommand::TEXTURESAMPLER:
|
||||
{
|
||||
@ -949,6 +972,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
glDisable(GL_DITHER);
|
||||
ditherEnabled = false;
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
break;
|
||||
default:
|
||||
Crash();
|
||||
@ -966,6 +990,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
activeSlot = 0; // doesn't matter, just nice.
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
|
||||
// Wipe out the current state.
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
@ -986,6 +1011,7 @@ void GLQueueRunner::PerformRenderPass(const GLRStep &step) {
|
||||
}
|
||||
|
||||
void GLQueueRunner::PerformCopy(const GLRStep &step) {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
GLuint srcTex = 0;
|
||||
GLuint dstTex = 0;
|
||||
GLuint target = GL_TEXTURE_2D;
|
||||
@ -1047,6 +1073,7 @@ void GLQueueRunner::PerformCopy(const GLRStep &step) {
|
||||
|
||||
void GLQueueRunner::PerformReadback(const GLRStep &pass) {
|
||||
using namespace Draw;
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
|
||||
GLRFramebuffer *fb = pass.readback.src;
|
||||
|
||||
@ -1149,6 +1176,7 @@ void GLQueueRunner::PerformBindFramebufferAsRenderTarget(const GLRStep &pass) {
|
||||
fbo_unbind();
|
||||
// Backbuffer is now bound.
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
||||
void GLQueueRunner::CopyReadbackBuffer(int width, int height, Draw::DataFormat srcFormat, Draw::DataFormat destFormat, int pixelStride, uint8_t *pixels) {
|
||||
@ -1168,6 +1196,7 @@ GLuint GLQueueRunner::AllocTextureName() {
|
||||
}
|
||||
u32 name = nameCache_.back();
|
||||
nameCache_.pop_back();
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
return name;
|
||||
}
|
||||
|
||||
@ -1178,6 +1207,8 @@ GLuint GLQueueRunner::AllocTextureName() {
|
||||
void GLQueueRunner::fbo_ext_create(const GLRInitStep &step) {
|
||||
GLRFramebuffer *fbo = step.create_framebuffer.framebuffer;
|
||||
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
|
||||
// Color texture is same everywhere
|
||||
glGenFramebuffersEXT(1, &fbo->handle);
|
||||
glGenTextures(1, &fbo->color_texture.texture);
|
||||
@ -1230,6 +1261,8 @@ void GLQueueRunner::fbo_ext_create(const GLRInitStep &step) {
|
||||
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
|
||||
currentDrawHandle_ = fbo->handle;
|
||||
currentReadHandle_ = fbo->handle;
|
||||
}
|
||||
@ -1295,6 +1328,7 @@ void GLQueueRunner::fbo_unbind() {
|
||||
}
|
||||
|
||||
GLRFramebuffer::~GLRFramebuffer() {
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
if (gl_extensions.ARB_framebuffer_object || gl_extensions.IsGLES) {
|
||||
if (handle) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, handle);
|
||||
@ -1326,4 +1360,5 @@ GLRFramebuffer::~GLRFramebuffer() {
|
||||
glDeleteRenderbuffers(1, &stencil_buffer);
|
||||
#endif
|
||||
}
|
||||
CHECK_GL_ERROR_IF_DEBUG();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user