diff --git a/docs/FAQ.aml b/docs/FAQ.aml index acf77b617..5c9ac9f3c 100644 --- a/docs/FAQ.aml +++ b/docs/FAQ.aml @@ -180,8 +180,8 @@ For OpenGL RenderDoc will only capture core profile applications, in general, and expects - to be able to create a core 4.3 context which includes EXT_direct_state_access. For more - details see the OpenGL page. + to be able to create a core 4.3 context which includes EXT_direct_state_access and ARB_buffer_storage. + For more details see the OpenGL page. diff --git a/docs/OpenGL.aml b/docs/OpenGL.aml index 93851c68f..da331b90b 100644 --- a/docs/OpenGL.aml +++ b/docs/OpenGL.aml @@ -30,7 +30,8 @@ RenderDoc assumes your hardware/software configuration is able to create a core 4.3 context - for replay, and also that EXT_direct_state_access is available, both on replay and in capture. + for replay, and also that EXT_direct_state_access and ARB_buffer_storage are available, both + on replay and in capture. Regarding multiple contexts and multithreading, RenderDoc assumes that all GL commands (with diff --git a/renderdoc/driver/gl/gl_replay_win32.cpp b/renderdoc/driver/gl/gl_replay_win32.cpp index c8e8ddc5e..f04fc4eec 100644 --- a/renderdoc/driver/gl/gl_replay_win32.cpp +++ b/renderdoc/driver/gl/gl_replay_win32.cpp @@ -428,7 +428,8 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr { // eventually we want to emulate EXT_dsa on replay if it isn't present, but for // now we just require it. - bool found = false; + bool dsa = false; + bool bufstorage = false; if(getStr) RDCLOG("Running GL replay on: %s / %s / %s", getStr(eGL_VENDOR), getStr(eGL_RENDERER), getStr(eGL_VERSION)); @@ -441,15 +442,18 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr RDCLOG("Extension % 3d: %s", e, ext); - if(!strcmp(ext, "GL_EXT_direct_state_access")) - { - found = true; - } + if(!strcmp(ext, "GL_EXT_direct_state_access")) dsa = true; + if(!strcmp(ext, "GL_ARB_buffer_storage")) bufstorage = true; } - if(!found) - { + if(!dsa) RDCERR("RenderDoc requires EXT_direct_state_access availability, and it is not reported. Try updating your drivers."); + + if(!bufstorage) + RDCERR("RenderDoc requires ARB_buffer_storage availability, and it is not reported. Try updating your drivers."); + + if(!dsa || !bufstorage) + { wglMakeCurrentProc(NULL, NULL); wglDeleteRC(rc); ReleaseDC(w, dc); @@ -483,7 +487,7 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr #define CHECK_PRESENT(func) \ if(!real.func) \ { \ - RDCERR("Missing function %s, required for replay. RenderDoc requires a 4.3 context and EXT_direct_state_access", #func); \ + RDCERR("Missing function %s, required for replay. RenderDoc requires a 4.3 context, EXT_direct_state_access and ARB_buffer_storage", #func); \ wglMakeCurrentProc(NULL, NULL); \ wglDeleteRC(rc); \ ReleaseDC(w, dc); \ @@ -721,7 +725,8 @@ CHECK_PRESENT(glViewport) CHECK_PRESENT(glViewportArrayv) CHECK_PRESENT(glViewportIndexedf) -// these functions should be present as part of EXT_direct_state_access, let's verify +// these functions should be present as part of EXT_direct_state_access, +// and ARB_buffer_storage. Let's verify CHECK_PRESENT(glCompressedTextureImage1DEXT) CHECK_PRESENT(glCompressedTextureImage2DEXT) CHECK_PRESENT(glCompressedTextureImage3DEXT) @@ -737,12 +742,11 @@ CHECK_PRESENT(glGetTextureParameterfvEXT) CHECK_PRESENT(glGetTextureParameterivEXT) CHECK_PRESENT(glMapNamedBufferEXT) CHECK_PRESENT(glNamedBufferDataEXT) -CHECK_PRESENT(glNamedBufferStorageEXT) +CHECK_PRESENT(glNamedBufferStorageEXT) // needs ARB_buffer_storage as well CHECK_PRESENT(glNamedBufferSubDataEXT) CHECK_PRESENT(glNamedFramebufferRenderbufferEXT) CHECK_PRESENT(glNamedFramebufferTextureEXT) CHECK_PRESENT(glNamedFramebufferTextureLayerEXT) -CHECK_PRESENT(glTextureBufferRangeEXT) CHECK_PRESENT(glTextureImage1DEXT) CHECK_PRESENT(glTextureImage2DEXT) CHECK_PRESENT(glTextureImage3DEXT)