From 78cce78cb1620c01ef1954b8850d83a7e08af667 Mon Sep 17 00:00:00 2001 From: Janos Pantos Date: Wed, 20 Dec 2017 16:11:57 +0100 Subject: [PATCH] Remap BGRA textures during remote replay if necessary With GL driver or if the required GLES extension is missing, than we display BGRA textures as RGBA. --- renderdoc/core/replay_proxy.cpp | 4 ++++ renderdoc/driver/gl/gl_common.h | 1 + renderdoc/driver/gl/gl_replay.cpp | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 0b54c16ac..f4cc50b4d 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -1733,6 +1733,10 @@ void ReplayProxy::RemapProxyTextureIfNeeded(TextureDescription &tex, GetTextureD params.remap = RemapTexture::RGBA8; } + // since the texture type is unsupported, remove the bgraOrder flag and remap it to RGBA + if(tex.format.bgraOrder && m_APIProps.localRenderer == GraphicsAPI::OpenGL) + tex.format.bgraOrder = false; + switch(params.remap) { case RemapTexture::NoRemap: RDCERR("IsTextureSupported == false, but we have no remap"); break; diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index c6173eb56..2147bd43e 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -450,6 +450,7 @@ extern bool IsGLES; EXT_TO_CHECK(99, 99, EXT_clip_cull_distance) \ EXT_TO_CHECK(99, 99, EXT_multisample_compatibility) \ EXT_TO_CHECK(99, 99, EXT_read_format_bgra) \ + EXT_TO_CHECK(99, 99, EXT_texture_format_BGRA8888) \ EXT_TO_CHECK(99, 99, NV_polygon_mode) \ EXT_TO_CHECK(99, 99, NV_read_depth) \ EXT_TO_CHECK(99, 99, NV_read_stencil) \ diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index c206dd023..1d7573671 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -3141,6 +3141,11 @@ bool GLReplay::IsTextureSupported(const ResourceFormat &format) if(format.type == ResourceFormatType::ASTC) return false; + // BGRA is not accepted as an internal format in case of GL + // EXT_texture_format_BGRA8888 is required for creating BGRA proxy textures in case of GLES + if(format.bgraOrder) + return IsGLES && HasExt[EXT_texture_format_BGRA8888]; + return true; }