videocore/renderer_opengl/gl_rasterizer_cache: Move bits per pixel table out of function (#5101)
* videocore/renderer_opengl/gl_rasterizer_cache: Move bits per pixel table out of function GCC and MSVC copy the table at runtime with the old implementation, which is wasteful and prevents inlining. Unfortunately, static constexpr variables are not legal in constexpr functions, so the table has to be external. Also replaced non-standard assert with DEBUG_ASSERT_MSG. * fix case of table name in assert * set table to private
This commit is contained in:
parent
55ec7031cc
commit
688e44bc8b
1 changed files with 27 additions and 23 deletions
|
@ -101,6 +101,29 @@ enum class ScaleMatch {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SurfaceParams {
|
struct SurfaceParams {
|
||||||
|
private:
|
||||||
|
static constexpr std::array<unsigned int, 18> BPP_TABLE = {
|
||||||
|
32, // RGBA8
|
||||||
|
24, // RGB8
|
||||||
|
16, // RGB5A1
|
||||||
|
16, // RGB565
|
||||||
|
16, // RGBA4
|
||||||
|
16, // IA8
|
||||||
|
16, // RG8
|
||||||
|
8, // I8
|
||||||
|
8, // A8
|
||||||
|
8, // IA4
|
||||||
|
4, // I4
|
||||||
|
4, // A4
|
||||||
|
4, // ETC1
|
||||||
|
8, // ETC1A4
|
||||||
|
16, // D16
|
||||||
|
0,
|
||||||
|
24, // D24
|
||||||
|
32, // D24S8
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
enum class PixelFormat {
|
enum class PixelFormat {
|
||||||
// First 5 formats are shared between textures and color buffers
|
// First 5 formats are shared between textures and color buffers
|
||||||
RGBA8 = 0,
|
RGBA8 = 0,
|
||||||
|
@ -139,30 +162,11 @@ struct SurfaceParams {
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr unsigned int GetFormatBpp(PixelFormat format) {
|
static constexpr unsigned int GetFormatBpp(PixelFormat format) {
|
||||||
constexpr std::array<unsigned int, 18> bpp_table = {
|
const auto format_idx = static_cast<std::size_t>(format);
|
||||||
32, // RGBA8
|
DEBUG_ASSERT_MSG(format_idx < BPP_TABLE.size(), "Invalid pixel format {}", format_idx);
|
||||||
24, // RGB8
|
return BPP_TABLE[format_idx];
|
||||||
16, // RGB5A1
|
|
||||||
16, // RGB565
|
|
||||||
16, // RGBA4
|
|
||||||
16, // IA8
|
|
||||||
16, // RG8
|
|
||||||
8, // I8
|
|
||||||
8, // A8
|
|
||||||
8, // IA4
|
|
||||||
4, // I4
|
|
||||||
4, // A4
|
|
||||||
4, // ETC1
|
|
||||||
8, // ETC1A4
|
|
||||||
16, // D16
|
|
||||||
0,
|
|
||||||
24, // D24
|
|
||||||
32, // D24S8
|
|
||||||
};
|
|
||||||
|
|
||||||
assert(static_cast<std::size_t>(format) < bpp_table.size());
|
|
||||||
return bpp_table[static_cast<std::size_t>(format)];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int GetFormatBpp() const {
|
unsigned int GetFormatBpp() const {
|
||||||
return GetFormatBpp(pixel_format);
|
return GetFormatBpp(pixel_format);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue