From 8366da4a6bd6f1b30ca790affb65ea93ffe2db7c Mon Sep 17 00:00:00 2001 From: Peter Gal Date: Wed, 15 Feb 2017 15:59:50 +0100 Subject: [PATCH] Add new OpenGL ES driver type Introduce the OpenGL ES driver type and use it in the EGL replay code path. Also propagate the GLES mode info into the OpenGL driver class. --- renderdoc/core/core.cpp | 1 + renderdoc/core/core.h | 1 + renderdoc/driver/gl/CMakeLists.txt | 6 ++---- renderdoc/driver/gl/gl_driver.cpp | 9 ++++++--- renderdoc/driver/gl/gl_driver.h | 4 ++++ renderdoc/driver/gl/gl_replay.cpp | 13 +++++++++++++ renderdoc/driver/gl/gl_replay_egl.cpp | 7 ++++--- 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index 5c9a774e9..2244b75da 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -61,6 +61,7 @@ string ToStrHelper::Get(const RDCDriver &el) { case RDC_Unknown: return "Unknown"; case RDC_OpenGL: return "OpenGL"; + case RDC_OpenGLES: return "OpenGLES"; case RDC_Mantle: return "Mantle"; case RDC_D3D12: return "D3D12"; case RDC_D3D11: return "D3D11"; diff --git a/renderdoc/core/core.h b/renderdoc/core/core.h index 3a4ff2990..0ffbea1a0 100644 --- a/renderdoc/core/core.h +++ b/renderdoc/core/core.h @@ -97,6 +97,7 @@ enum RDCDriver RDC_D3D9 = 6, RDC_Image = 7, RDC_Vulkan = 8, + RDC_OpenGLES = 9, RDC_Custom = 100000, RDC_Custom0 = RDC_Custom, RDC_Custom1, diff --git a/renderdoc/driver/gl/CMakeLists.txt b/renderdoc/driver/gl/CMakeLists.txt index e7a90be9c..57da71173 100644 --- a/renderdoc/driver/gl/CMakeLists.txt +++ b/renderdoc/driver/gl/CMakeLists.txt @@ -53,13 +53,11 @@ elseif(UNIX) gl_replay_linux.cpp glx_hooks_linux.cpp gl_hooks_linux.cpp) - elseif(ENABLE_GLES) - list(APPEND sources - gl_replay_egl.cpp) endif() if(ENABLE_GLES) list(APPEND sources - gl_hooks_egl.cpp) + gl_hooks_egl.cpp + gl_replay_egl.cpp) endif() endif() diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index fbd8eb942..68a268775 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -717,6 +717,9 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs) : m_Re // sorts are identical so we can do the intersection easily std::sort(globalExts.begin(), globalExts.end()); + // by default we assume OpenGL driver + SetDriverType(RDC_OpenGL); + m_Replay.SetDriver(this); m_FrameCounter = 0; @@ -2307,7 +2310,7 @@ void WrappedOpenGL::SwapBuffers(void *windowHandle) int flags = activeWindow ? RenderDoc::eOverlay_ActiveWindow : 0; if(ctxdata.Legacy()) flags |= RenderDoc::eOverlay_CaptureDisabled; - string overlayText = RenderDoc::Inst().GetOverlayText(RDC_OpenGL, m_FrameCounter, flags); + string overlayText = RenderDoc::Inst().GetOverlayText(GetDriverType(), m_FrameCounter, flags); if(ctxdata.Legacy()) { @@ -2353,7 +2356,7 @@ void WrappedOpenGL::SwapBuffers(void *windowHandle) if(!activeWindow) return; - RenderDoc::Inst().SetCurrentDriver(RDC_OpenGL); + RenderDoc::Inst().SetCurrentDriver(GetDriverType()); // only allow capturing on 'modern' created contexts if(ctxdata.Legacy()) @@ -2416,7 +2419,7 @@ void WrappedOpenGL::StartFrameCapture(void *dev, void *wnd) SCOPED_LOCK(GetGLLock()); - RenderDoc::Inst().SetCurrentDriver(RDC_OpenGL); + RenderDoc::Inst().SetCurrentDriver(GetDriverType()); m_State = WRITING_CAPFRAME; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 9743b7b1f..f4afcfee2 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -155,6 +155,7 @@ private: bool m_AppControlledCapture; GLReplay m_Replay; + RDCDriver m_DriverType; GLInitParams m_InitParams; @@ -500,6 +501,9 @@ public: ResourceId GetDeviceResourceID() { return m_DeviceResourceID; } ResourceId GetContextResourceID() { return m_ContextResourceID; } GLReplay *GetReplay() { return &m_Replay; } + void SetDriverType(RDCDriver type) { m_DriverType = type; } + bool isGLESMode() { return m_DriverType == RDC_OpenGLES; } + RDCDriver GetDriverType() { return m_DriverType; } void *GetCtx(); void SetFetchCounters(bool in) { m_FetchCounters = in; }; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index ca2507d19..f933f8494 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -3205,7 +3205,20 @@ ShaderDebugTrace GLReplay::DebugThread(uint32_t eventID, uint32_t groupid[3], ui const GLHookSet &GetRealGLFunctions(); +#if defined(RENDERDOC_SUPPORT_GL) + // defined in gl_replay_.cpp ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **driver); static DriverRegistration GLDriverRegistration(RDC_OpenGL, "OpenGL", &GL_CreateReplayDevice); + +#endif + +#if defined(RENDERDOC_SUPPORT_GLES) + +// defined in gl_replay_egl.cpp +ReplayCreateStatus GLES_CreateReplayDevice(const char *logfile, IReplayDriver **driver); + +static DriverRegistration GLESDriverRegistration(RDC_OpenGLES, "OpenGLES", &GLES_CreateReplayDevice); + +#endif diff --git a/renderdoc/driver/gl/gl_replay_egl.cpp b/renderdoc/driver/gl/gl_replay_egl.cpp index 26539dbb7..47bfddce6 100644 --- a/renderdoc/driver/gl/gl_replay_egl.cpp +++ b/renderdoc/driver/gl/gl_replay_egl.cpp @@ -218,7 +218,7 @@ bool GLReplay::IsOutputWindowVisible(uint64_t id) const GLHookSet &GetRealGLFunctionsEGL(); -ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **driver) +ReplayCreateStatus GLES_CreateReplayDevice(const char *logfile, IReplayDriver **driver) { RDCDEBUG("Creating an OpenGL ES replay device"); @@ -255,8 +255,8 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr } GLInitParams initParams; - RDCDriver driverType = RDC_OpenGL; - string driverName = "OpenGL"; + RDCDriver driverType = RDC_OpenGLES; + string driverName = "OpenGLES"; uint64_t machineIdent = 0; if(logfile) @@ -358,6 +358,7 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr } WrappedOpenGL *gl = new WrappedOpenGL(logfile, real); + gl->SetDriverType(RDC_OpenGLES); gl->Initialise(initParams); if(gl->GetSerialiser()->HasError())