From 1a6b19a314f1396a4147b9b06d8b1e16873222aa Mon Sep 17 00:00:00 2001 From: Janos Pantos Date: Tue, 28 Mar 2017 18:09:06 +0200 Subject: [PATCH] Remove using some non-GLES features from GL manager/renderstate/replay --- renderdoc/driver/gl/gl_manager.cpp | 13 ++++++++++--- renderdoc/driver/gl/gl_renderstate.cpp | 26 ++++++++++++++++++-------- renderdoc/driver/gl/gl_replay.cpp | 3 ++- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/renderdoc/driver/gl/gl_manager.cpp b/renderdoc/driver/gl/gl_manager.cpp index 4bef3537d..9ff1a5173 100644 --- a/renderdoc/driver/gl/gl_manager.cpp +++ b/renderdoc/driver/gl/gl_manager.cpp @@ -642,7 +642,9 @@ void GLResourceManager::PrepareTextureInitialContents(ResourceId liveid, Resourc gl.glGetTextureParameterfvEXT(res.name, details.curType, eGL_TEXTURE_MAX_LOD, &state->maxLod); gl.glGetTextureParameterfvEXT(res.name, details.curType, eGL_TEXTURE_BORDER_COLOR, &state->border[0]); - gl.glGetTextureParameterfvEXT(res.name, details.curType, eGL_TEXTURE_LOD_BIAS, &state->lodBias); + if(!IsGLES) + gl.glGetTextureParameterfvEXT(res.name, details.curType, eGL_TEXTURE_LOD_BIAS, + &state->lodBias); // CLAMP isn't supported (border texels gone), assume they meant CLAMP_TO_EDGE if(state->wrap[0] == eGL_CLAMP) @@ -2012,7 +2014,9 @@ void GLResourceManager::Apply_InitialState(GLResource live, InitialContentData i (GLint *)&state->wrap[2]); gl.glTextureParameterfvEXT(live.name, details.curType, eGL_TEXTURE_BORDER_COLOR, state->border); - gl.glTextureParameterfvEXT(live.name, details.curType, eGL_TEXTURE_LOD_BIAS, &state->lodBias); + if(!IsGLES) + gl.glTextureParameterfvEXT(live.name, details.curType, eGL_TEXTURE_LOD_BIAS, + &state->lodBias); if(details.curType != eGL_TEXTURE_RECTANGLE) { gl.glTextureParameterfvEXT(live.name, details.curType, eGL_TEXTURE_MIN_LOD, &state->minLod); @@ -2145,7 +2149,10 @@ void GLResourceManager::Apply_InitialState(GLResource live, InitialContentData i if(data->ReadBuffer == eGL_BACK || data->ReadBuffer == eGL_FRONT) data->ReadBuffer = eGL_COLOR_ATTACHMENT0; - gl.glDrawBuffers(ARRAY_COUNT(data->DrawBuffers), data->DrawBuffers); + GLuint maxDraws = 0; + gl.glGetIntegerv(eGL_MAX_DRAW_BUFFERS, (GLint *)&maxDraws); + + gl.glDrawBuffers(RDCMIN(maxDraws, (GLuint)ARRAY_COUNT(data->DrawBuffers)), data->DrawBuffers); gl.glReadBuffer(data->ReadBuffer); diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index ebf7368a2..6b2a038ed 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -717,7 +717,8 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl) m_Real->glGetFloatv(eGL_POINT_SIZE, &PointSize); } - m_Real->glGetIntegerv(eGL_PRIMITIVE_RESTART_INDEX, (GLint *)&PrimitiveRestartIndex); + if(!IsGLES) + m_Real->glGetIntegerv(eGL_PRIMITIVE_RESTART_INDEX, (GLint *)&PrimitiveRestartIndex); if(HasExt[ARB_clip_control]) { m_Real->glGetIntegerv(eGL_CLIP_ORIGIN, (GLint *)&ClipOrigin); @@ -728,7 +729,8 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl) ClipOrigin = eGL_LOWER_LEFT; ClipDepth = eGL_NEGATIVE_ONE_TO_ONE; } - m_Real->glGetIntegerv(eGL_PROVOKING_VERTEX, (GLint *)&ProvokingVertex); + if(!IsGLES) + m_Real->glGetIntegerv(eGL_PROVOKING_VERTEX, (GLint *)&ProvokingVertex); m_Real->glGetIntegerv(eGL_CURRENT_PROGRAM, (GLint *)&Program); @@ -1028,14 +1030,17 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl) m_Real->glGetFloatv(eGL_COLOR_CLEAR_VALUE, &ColorClearValue.red); if(HasExt[ARB_tessellation_shader]) - { m_Real->glGetIntegerv(eGL_PATCH_VERTICES, &PatchParams.numVerts); + else + PatchParams.numVerts = 3; + + if(!IsGLES && HasExt[ARB_tessellation_shader]) + { m_Real->glGetFloatv(eGL_PATCH_DEFAULT_INNER_LEVEL, &PatchParams.defaultInnerLevel[0]); m_Real->glGetFloatv(eGL_PATCH_DEFAULT_OUTER_LEVEL, &PatchParams.defaultOuterLevel[0]); } else { - PatchParams.numVerts = 3; PatchParams.defaultInnerLevel[0] = PatchParams.defaultInnerLevel[1] = 1.0f; PatchParams.defaultOuterLevel[0] = PatchParams.defaultOuterLevel[1] = PatchParams.defaultOuterLevel[2] = PatchParams.defaultOuterLevel[3] = 1.0f; @@ -1152,10 +1157,12 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl) m_Real->glPointSize(PointSize); } - m_Real->glPrimitiveRestartIndex(PrimitiveRestartIndex); + if(!IsGLES) + m_Real->glPrimitiveRestartIndex(PrimitiveRestartIndex); if(m_Real->glClipControl && HasExt[ARB_clip_control]) m_Real->glClipControl(ClipOrigin, ClipDepth); - m_Real->glProvokingVertex(ProvokingVertex); + if(!IsGLES) + m_Real->glProvokingVertex(ProvokingVertex); m_Real->glUseProgram(Program); if(HasExt[ARB_separate_shader_objects]) @@ -1404,8 +1411,11 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl) if(HasExt[ARB_tessellation_shader]) { m_Real->glPatchParameteri(eGL_PATCH_VERTICES, PatchParams.numVerts); - m_Real->glPatchParameterfv(eGL_PATCH_DEFAULT_INNER_LEVEL, PatchParams.defaultInnerLevel); - m_Real->glPatchParameterfv(eGL_PATCH_DEFAULT_OUTER_LEVEL, PatchParams.defaultOuterLevel); + if(!IsGLES) + { + m_Real->glPatchParameterfv(eGL_PATCH_DEFAULT_INNER_LEVEL, PatchParams.defaultInnerLevel); + m_Real->glPatchParameterfv(eGL_PATCH_DEFAULT_OUTER_LEVEL, PatchParams.defaultOuterLevel); + } } m_Real->glPolygonMode(eGL_FRONT_AND_BACK, PolygonMode); diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 3e80236d2..f98cd07cb 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -1450,7 +1450,8 @@ void GLReplay::SavePipelineState() gl.glGetTexParameterfv(target, eGL_TEXTURE_MAX_LOD, &pipe.Samplers[unit].MaxLOD); gl.glGetTexParameterfv(target, eGL_TEXTURE_MIN_LOD, &pipe.Samplers[unit].MinLOD); - gl.glGetTexParameterfv(target, eGL_TEXTURE_LOD_BIAS, &pipe.Samplers[unit].MipLODBias); + if(!IsGLES) + gl.glGetTexParameterfv(target, eGL_TEXTURE_LOD_BIAS, &pipe.Samplers[unit].MipLODBias); } else {