diff --git a/src/video_core/rasterizer_cache/rasterizer_cache.cpp b/src/video_core/rasterizer_cache/rasterizer_cache.cpp index e76ac45ec..11c0eb69f 100644 --- a/src/video_core/rasterizer_cache/rasterizer_cache.cpp +++ b/src/video_core/rasterizer_cache/rasterizer_cache.cpp @@ -38,6 +38,15 @@ namespace OpenGL { +constexpr FormatTuple tex_tuple = {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}; + +static constexpr std::array depth_format_tuples = {{ + {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16 + {}, + {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}, // D24 + {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // D24S8 +}}; + static constexpr std::array fb_format_tuples = {{ {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8}, // RGBA8 {GL_RGB8, GL_BGR, GL_UNSIGNED_BYTE}, // RGB8 @@ -59,17 +68,17 @@ static constexpr std::array fb_format_tuples_oes = {{ const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { const SurfaceType type = GetFormatType(pixel_format); + const std::size_t format_index = static_cast(pixel_format); + if (type == SurfaceType::Color) { - ASSERT(static_cast(pixel_format) < fb_format_tuples.size()); - if (GLES) { - return fb_format_tuples_oes[static_cast(pixel_format)]; - } - return fb_format_tuples[static_cast(pixel_format)]; + ASSERT(format_index < fb_format_tuples.size()); + return (GLES ? fb_format_tuples_oes : fb_format_tuples)[format_index]; } else if (type == SurfaceType::Depth || type == SurfaceType::DepthStencil) { - std::size_t tuple_idx = static_cast(pixel_format) - 14; + const std::size_t tuple_idx = format_index - 14; ASSERT(tuple_idx < depth_format_tuples.size()); return depth_format_tuples[tuple_idx]; } + return tex_tuple; } diff --git a/src/video_core/rasterizer_cache/rasterizer_cache.h b/src/video_core/rasterizer_cache/rasterizer_cache.h index 58167210b..b6932dea7 100644 --- a/src/video_core/rasterizer_cache/rasterizer_cache.h +++ b/src/video_core/rasterizer_cache/rasterizer_cache.h @@ -43,14 +43,13 @@ struct FormatTuple { GLenum type; }; -constexpr FormatTuple tex_tuple = {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}; - const FormatTuple& GetFormatTuple(PixelFormat pixel_format); struct HostTextureTag { FormatTuple format_tuple; u32 width; u32 height; + bool operator==(const HostTextureTag& rhs) const noexcept { return std::tie(format_tuple.format, format_tuple.internal_format, width, height) == std::tie(rhs.format_tuple.format, rhs.format_tuple.internal_format, rhs.width, @@ -260,13 +259,6 @@ struct CachedTextureCube { std::shared_ptr nz; }; -static constexpr std::array depth_format_tuples = {{ - {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16 - {}, - {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}, // D24 - {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // D24S8 -}}; - class TextureDownloaderES; class RasterizerCacheOpenGL : NonCopyable {