From 8c91f5a8089507d8def646ffd1bea0dde5a9dd3a Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 17 Jan 2017 18:59:07 +0000 Subject: [PATCH] Mark capture as degraded if we're missing key hardware capabilities * This includes primarily compute shaders and image load/store --- renderdoc/driver/gl/gl_common.h | 1 - renderdoc/driver/gl/gl_debug.cpp | 9 +++++++++ renderdoc/driver/gl/gl_renderstate.cpp | 2 +- renderdoc/driver/gl/gl_replay.cpp | 4 +++- renderdoc/driver/gl/gl_replay.h | 2 ++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 2c2970ebd..1c2fe25b3 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -197,7 +197,6 @@ extern bool GLIsCore; EXT_TO_CHECK(EXT_depth_bounds_test) \ EXT_TO_CHECK(ARB_compute_shader) \ EXT_TO_CHECK(ARB_program_interface_query) \ - EXT_TO_CHECK(ARB_image_load_store) \ EXT_TO_CHECK(ARB_copy_image) \ EXT_TO_CHECK(ARB_shader_atomic_counters) \ EXT_TO_CHECK(ARB_shader_storage_buffer_object) \ diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 35a0bf910..adfb9cd88 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -646,6 +646,8 @@ void GLReplay::InitDebugData() eDbgSource_RuntimeWarning, "ARB_gpu_shader5 not supported, pixel picking and saving of integer " "textures may be inaccurate."); + + m_Degraded = true; } if(!HasExt[ARB_stencil_texturing]) @@ -654,6 +656,13 @@ void GLReplay::InitDebugData() m_pDriver->AddDebugMessage( eDbgCategory_Portability, eDbgSeverity_Medium, eDbgSource_RuntimeWarning, "ARB_stencil_texturing not supported, stencil values will not be displayed or picked."); + + m_Degraded = true; + } + + if(!HasExt[ARB_shader_image_load_store] || !HasExt[ARB_compute_shader]) + { + m_Degraded = true; } } diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 492889d5f..e9f41a652 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -413,7 +413,7 @@ void GLRenderState::MarkDirty(WrappedOpenGL *gl) } } - if(GLCoreVersion >= 42 || HasExt[ARB_image_load_store]) + if(GLCoreVersion >= 42 || HasExt[ARB_shader_image_load_store]) { m_Real->glGetIntegerv(eGL_MAX_IMAGE_UNITS, &maxCount); diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 5c56c84ce..750974b40 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -36,6 +36,8 @@ GLReplay::GLReplay() m_pDriver = NULL; m_Proxy = false; + m_Degraded = false; + RDCEraseEl(m_ReplayCtx); m_DebugCtx = NULL; @@ -122,7 +124,7 @@ APIProperties GLReplay::GetAPIProperties() ret.pipelineType = eGraphicsAPI_OpenGL; ret.localRenderer = eGraphicsAPI_OpenGL; - ret.degraded = false; + ret.degraded = m_Degraded; return ret; } diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 7bdc881a5..12deb626c 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -351,6 +351,8 @@ private: GLuint emptyVAO; } DebugData; + bool m_Degraded; + FloatVector InterpretVertex(byte *data, uint32_t vert, const MeshDisplay &cfg, byte *end, bool useidx, bool &valid);