mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	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 { | ||||
| 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 { | ||||
|         // First 5 formats are shared between textures and color buffers
 | ||||
|         RGBA8 = 0, | ||||
|  | @ -139,30 +162,11 @@ struct SurfaceParams { | |||
|     }; | ||||
| 
 | ||||
|     static constexpr unsigned int GetFormatBpp(PixelFormat format) { | ||||
|         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
 | ||||
|         }; | ||||
| 
 | ||||
|         assert(static_cast<std::size_t>(format) < bpp_table.size()); | ||||
|         return bpp_table[static_cast<std::size_t>(format)]; | ||||
|         const auto format_idx = static_cast<std::size_t>(format); | ||||
|         DEBUG_ASSERT_MSG(format_idx < BPP_TABLE.size(), "Invalid pixel format {}", format_idx); | ||||
|         return BPP_TABLE[format_idx]; | ||||
|     } | ||||
| 
 | ||||
|     unsigned int GetFormatBpp() const { | ||||
|         return GetFormatBpp(pixel_format); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue