mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	rasterizer_cache: Move utlities and type to separate headers
This commit is contained in:
		
							parent
							
								
									0fedf11be1
								
							
						
					
					
						commit
						f6e3bb54f4
					
				
					 8 changed files with 181 additions and 156 deletions
				
			
		|  | @ -27,6 +27,9 @@ add_library(video_core STATIC | ||||||
|     rasterizer_cache/pixel_format.h |     rasterizer_cache/pixel_format.h | ||||||
|     rasterizer_cache/rasterizer_cache.cpp |     rasterizer_cache/rasterizer_cache.cpp | ||||||
|     rasterizer_cache/rasterizer_cache.h |     rasterizer_cache/rasterizer_cache.h | ||||||
|  |     rasterizer_cache/rasterizer_cache_types.h | ||||||
|  |     rasterizer_cache/rasterizer_cache_utils.cpp | ||||||
|  |     rasterizer_cache/rasterizer_cache_utils.h | ||||||
|     rasterizer_cache/surface_params.cpp |     rasterizer_cache/surface_params.cpp | ||||||
|     rasterizer_cache/surface_params.h |     rasterizer_cache/surface_params.h | ||||||
|     renderer_opengl/frame_dumper_opengl.cpp |     renderer_opengl/frame_dumper_opengl.cpp | ||||||
|  |  | ||||||
|  | @ -38,50 +38,6 @@ | ||||||
| 
 | 
 | ||||||
| namespace OpenGL { | namespace OpenGL { | ||||||
| 
 | 
 | ||||||
| constexpr FormatTuple tex_tuple = {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}; |  | ||||||
| 
 |  | ||||||
| static constexpr std::array<FormatTuple, 4> 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<FormatTuple, 5> fb_format_tuples = {{ |  | ||||||
|     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8},     // RGBA8
 |  | ||||||
|     {GL_RGB8, GL_BGR, GL_UNSIGNED_BYTE},              // RGB8
 |  | ||||||
|     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1}, // RGB5A1
 |  | ||||||
|     {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},     // RGB565
 |  | ||||||
|     {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4},   // RGBA4
 |  | ||||||
| }}; |  | ||||||
| 
 |  | ||||||
| // Same as above, with minor changes for OpenGL ES. Replaced
 |  | ||||||
| // GL_UNSIGNED_INT_8_8_8_8 with GL_UNSIGNED_BYTE and
 |  | ||||||
| // GL_BGR with GL_RGB
 |  | ||||||
| static constexpr std::array<FormatTuple, 5> fb_format_tuples_oes = {{ |  | ||||||
|     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE},            // RGBA8
 |  | ||||||
|     {GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE},              // RGB8
 |  | ||||||
|     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1}, // RGB5A1
 |  | ||||||
|     {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},     // RGB565
 |  | ||||||
|     {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4},   // RGBA4
 |  | ||||||
| }}; |  | ||||||
| 
 |  | ||||||
| const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { |  | ||||||
|     const SurfaceType type = GetFormatType(pixel_format); |  | ||||||
|     const std::size_t format_index = static_cast<std::size_t>(pixel_format); |  | ||||||
| 
 |  | ||||||
|     if (type == SurfaceType::Color) { |  | ||||||
|         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) { |  | ||||||
|         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; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template <typename Map, typename Interval> | template <typename Map, typename Interval> | ||||||
| static constexpr auto RangeFromInterval(Map& map, const Interval& interval) { | static constexpr auto RangeFromInterval(Map& map, const Interval& interval) { | ||||||
|     return boost::make_iterator_range(map.equal_range(interval)); |     return boost::make_iterator_range(map.equal_range(interval)); | ||||||
|  |  | ||||||
|  | @ -27,109 +27,13 @@ | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/math_util.h" | #include "common/math_util.h" | ||||||
| #include "core/custom_tex_cache.h" | #include "core/custom_tex_cache.h" | ||||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | #include "video_core/rasterizer_cache/rasterizer_cache_utils.h" | ||||||
| #include "video_core/rasterizer_cache/surface_params.h" | #include "video_core/rasterizer_cache/surface_params.h" | ||||||
|  | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||||
| #include "video_core/texture/texture_decode.h" | #include "video_core/texture/texture_decode.h" | ||||||
| 
 | 
 | ||||||
| namespace OpenGL { | namespace OpenGL { | ||||||
| 
 | 
 | ||||||
| class RasterizerCacheOpenGL; |  | ||||||
| class TextureFilterer; |  | ||||||
| class FormatReinterpreterOpenGL; |  | ||||||
| 
 |  | ||||||
| struct FormatTuple { |  | ||||||
|     GLint internal_format; |  | ||||||
|     GLenum format; |  | ||||||
|     GLenum type; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 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, |  | ||||||
|                         rhs.height); |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct TextureCubeConfig { |  | ||||||
|     PAddr px; |  | ||||||
|     PAddr nx; |  | ||||||
|     PAddr py; |  | ||||||
|     PAddr ny; |  | ||||||
|     PAddr pz; |  | ||||||
|     PAddr nz; |  | ||||||
|     u32 width; |  | ||||||
|     Pica::TexturingRegs::TextureFormat format; |  | ||||||
| 
 |  | ||||||
|     bool operator==(const TextureCubeConfig& rhs) const { |  | ||||||
|         return std::tie(px, nx, py, ny, pz, nz, width, format) == |  | ||||||
|                std::tie(rhs.px, rhs.nx, rhs.py, rhs.ny, rhs.pz, rhs.nz, rhs.width, rhs.format); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     bool operator!=(const TextureCubeConfig& rhs) const { |  | ||||||
|         return !(*this == rhs); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| } // namespace OpenGL
 |  | ||||||
| 
 |  | ||||||
| namespace std { |  | ||||||
| template <> |  | ||||||
| struct hash<OpenGL::HostTextureTag> { |  | ||||||
|     std::size_t operator()(const OpenGL::HostTextureTag& tag) const noexcept { |  | ||||||
|         std::size_t hash = 0; |  | ||||||
|         boost::hash_combine(hash, tag.format_tuple.format); |  | ||||||
|         boost::hash_combine(hash, tag.format_tuple.internal_format); |  | ||||||
|         boost::hash_combine(hash, tag.width); |  | ||||||
|         boost::hash_combine(hash, tag.height); |  | ||||||
|         return hash; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| template <> |  | ||||||
| struct hash<OpenGL::TextureCubeConfig> { |  | ||||||
|     std::size_t operator()(const OpenGL::TextureCubeConfig& config) const noexcept { |  | ||||||
|         std::size_t hash = 0; |  | ||||||
|         boost::hash_combine(hash, config.px); |  | ||||||
|         boost::hash_combine(hash, config.nx); |  | ||||||
|         boost::hash_combine(hash, config.py); |  | ||||||
|         boost::hash_combine(hash, config.ny); |  | ||||||
|         boost::hash_combine(hash, config.pz); |  | ||||||
|         boost::hash_combine(hash, config.nz); |  | ||||||
|         boost::hash_combine(hash, config.width); |  | ||||||
|         boost::hash_combine(hash, static_cast<u32>(config.format)); |  | ||||||
|         return hash; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| } // namespace std
 |  | ||||||
| 
 |  | ||||||
| namespace OpenGL { |  | ||||||
| 
 |  | ||||||
| using SurfaceSet = std::set<Surface>; |  | ||||||
| 
 |  | ||||||
| using SurfaceRegions = boost::icl::interval_set<PAddr, std::less, SurfaceInterval>; |  | ||||||
| using SurfaceMap = |  | ||||||
|     boost::icl::interval_map<PAddr, Surface, boost::icl::partial_absorber, std::less, |  | ||||||
|                              boost::icl::inplace_plus, boost::icl::inter_section, SurfaceInterval>; |  | ||||||
| using SurfaceCache = |  | ||||||
|     boost::icl::interval_map<PAddr, SurfaceSet, boost::icl::partial_absorber, std::less, |  | ||||||
|                              boost::icl::inplace_plus, boost::icl::inter_section, SurfaceInterval>; |  | ||||||
| 
 |  | ||||||
| static_assert(std::is_same<SurfaceRegions::interval_type, SurfaceCache::interval_type>() && |  | ||||||
|                   std::is_same<SurfaceMap::interval_type, SurfaceCache::interval_type>(), |  | ||||||
|               "incorrect interval types"); |  | ||||||
| 
 |  | ||||||
| using SurfaceRect_Tuple = std::tuple<Surface, Common::Rectangle<u32>>; |  | ||||||
| using SurfaceSurfaceRect_Tuple = std::tuple<Surface, Surface, Common::Rectangle<u32>>; |  | ||||||
| 
 |  | ||||||
| using PageMap = boost::icl::interval_map<u32, int>; |  | ||||||
| 
 |  | ||||||
| enum class ScaleMatch { | enum class ScaleMatch { | ||||||
|     Exact,   // only accept same res scale
 |     Exact,   // only accept same res scale
 | ||||||
|     Upscale, // only allow higher scale than params
 |     Upscale, // only allow higher scale than params
 | ||||||
|  | @ -260,6 +164,8 @@ struct CachedTextureCube { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class TextureDownloaderES; | class TextureDownloaderES; | ||||||
|  | class TextureFilterer; | ||||||
|  | class FormatReinterpreterOpenGL; | ||||||
| 
 | 
 | ||||||
| class RasterizerCacheOpenGL : NonCopyable { | class RasterizerCacheOpenGL : NonCopyable { | ||||||
| public: | public: | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_types.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_types.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | // Copyright 2022 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | #include <memory> | ||||||
|  | #include <set> | ||||||
|  | #include <boost/icl/interval_map.hpp> | ||||||
|  | #include <boost/icl/interval_set.hpp> | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include "common/math_util.h" | ||||||
|  | 
 | ||||||
|  | namespace OpenGL { | ||||||
|  | 
 | ||||||
|  | class CachedSurface; | ||||||
|  | using Surface = std::shared_ptr<CachedSurface>; | ||||||
|  | 
 | ||||||
|  | // Declare rasterizer interval types
 | ||||||
|  | using SurfaceInterval = boost::icl::right_open_interval<PAddr>; | ||||||
|  | using SurfaceSet = std::set<Surface>; | ||||||
|  | using SurfaceRegions = boost::icl::interval_set<PAddr, std::less, SurfaceInterval>; | ||||||
|  | using SurfaceMap = boost::icl::interval_map<PAddr, Surface, boost::icl::partial_absorber, | ||||||
|  |                                             std::less, boost::icl::inplace_plus, | ||||||
|  |                                             boost::icl::inter_section, SurfaceInterval>; | ||||||
|  | using SurfaceCache = boost::icl::interval_map<PAddr, SurfaceSet, boost::icl::partial_absorber, | ||||||
|  |                                               std::less, boost::icl::inplace_plus, | ||||||
|  |                                               boost::icl::inter_section, SurfaceInterval>; | ||||||
|  | 
 | ||||||
|  | static_assert(std::is_same<SurfaceRegions::interval_type, SurfaceCache::interval_type>() && | ||||||
|  |               std::is_same<SurfaceMap::interval_type, SurfaceCache::interval_type>(), | ||||||
|  |               "Incorrect interval types"); | ||||||
|  | 
 | ||||||
|  | using SurfaceRect_Tuple = std::tuple<Surface, Common::Rectangle<u32>>; | ||||||
|  | using SurfaceSurfaceRect_Tuple = std::tuple<Surface, Surface, Common::Rectangle<u32>>; | ||||||
|  | using PageMap = boost::icl::interval_map<u32, int>; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } // namespace OpenGL
 | ||||||
							
								
								
									
										56
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_utils.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_utils.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | ||||||
|  | // Copyright 2022 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | #include <glad/glad.h> | ||||||
|  | #include "video_core/rasterizer_cache/rasterizer_cache_utils.h" | ||||||
|  | #include "video_core/renderer_opengl/gl_vars.h" | ||||||
|  | 
 | ||||||
|  | namespace OpenGL { | ||||||
|  | 
 | ||||||
|  | constexpr FormatTuple tex_tuple = {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}; | ||||||
|  | 
 | ||||||
|  | static constexpr std::array<FormatTuple, 4> 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<FormatTuple, 5> fb_format_tuples = {{ | ||||||
|  |     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8},     // RGBA8
 | ||||||
|  |     {GL_RGB8, GL_BGR, GL_UNSIGNED_BYTE},              // RGB8
 | ||||||
|  |     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1}, // RGB5A1
 | ||||||
|  |     {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},     // RGB565
 | ||||||
|  |     {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4},   // RGBA4
 | ||||||
|  | }}; | ||||||
|  | 
 | ||||||
|  | // Same as above, with minor changes for OpenGL ES. Replaced
 | ||||||
|  | // GL_UNSIGNED_INT_8_8_8_8 with GL_UNSIGNED_BYTE and
 | ||||||
|  | // GL_BGR with GL_RGB
 | ||||||
|  | static constexpr std::array<FormatTuple, 5> fb_format_tuples_oes = {{ | ||||||
|  |     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE},            // RGBA8
 | ||||||
|  |     {GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE},              // RGB8
 | ||||||
|  |     {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1}, // RGB5A1
 | ||||||
|  |     {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5},     // RGB565
 | ||||||
|  |     {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4},   // RGBA4
 | ||||||
|  | }}; | ||||||
|  | 
 | ||||||
|  | const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { | ||||||
|  |     const SurfaceType type = GetFormatType(pixel_format); | ||||||
|  |     const std::size_t format_index = static_cast<std::size_t>(pixel_format); | ||||||
|  | 
 | ||||||
|  |     if (type == SurfaceType::Color) { | ||||||
|  |         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) { | ||||||
|  |         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; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } // namespace OpenGL
 | ||||||
							
								
								
									
										76
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_utils.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/video_core/rasterizer_cache/rasterizer_cache_utils.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | ||||||
|  | // Copyright 2022 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | #include <functional> | ||||||
|  | #include <set> | ||||||
|  | #include <boost/icl/interval_map.hpp> | ||||||
|  | #include <boost/icl/interval_set.hpp> | ||||||
|  | #include "common/hash.h" | ||||||
|  | #include "video_core/rasterizer_cache/pixel_format.h" | ||||||
|  | 
 | ||||||
|  | namespace OpenGL { | ||||||
|  | 
 | ||||||
|  | struct FormatTuple { | ||||||
|  |     int internal_format; | ||||||
|  |     u32 format; | ||||||
|  |     u32 type; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const FormatTuple& GetFormatTuple(PixelFormat pixel_format); | ||||||
|  | 
 | ||||||
|  | struct HostTextureTag { | ||||||
|  |     FormatTuple format_tuple{}; | ||||||
|  |     u32 width = 0; | ||||||
|  |     u32 height = 0; | ||||||
|  | 
 | ||||||
|  |     bool operator==(const HostTextureTag& rhs) const noexcept { | ||||||
|  |         return std::memcmp(this, &rhs, sizeof(HostTextureTag)) == 0; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     const u64 Hash() const { | ||||||
|  |         return Common::ComputeHash64(this, sizeof(HostTextureTag)); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct TextureCubeConfig { | ||||||
|  |     PAddr px; | ||||||
|  |     PAddr nx; | ||||||
|  |     PAddr py; | ||||||
|  |     PAddr ny; | ||||||
|  |     PAddr pz; | ||||||
|  |     PAddr nz; | ||||||
|  |     u32 width; | ||||||
|  |     Pica::TexturingRegs::TextureFormat format; | ||||||
|  | 
 | ||||||
|  |     bool operator==(const TextureCubeConfig& rhs) const { | ||||||
|  |         return std::memcmp(this, &rhs, sizeof(TextureCubeConfig)) == 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     bool operator!=(const TextureCubeConfig& rhs) const { | ||||||
|  |         return std::memcmp(this, &rhs, sizeof(TextureCubeConfig)) != 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const u64 Hash() const { | ||||||
|  |         return Common::ComputeHash64(this, sizeof(TextureCubeConfig)); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } // namespace OpenGL
 | ||||||
|  | 
 | ||||||
|  | namespace std { | ||||||
|  | template <> | ||||||
|  | struct hash<OpenGL::HostTextureTag> { | ||||||
|  |     std::size_t operator()(const OpenGL::HostTextureTag& tag) const noexcept { | ||||||
|  |         return tag.Hash(); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | template <> | ||||||
|  | struct hash<OpenGL::TextureCubeConfig> { | ||||||
|  |     std::size_t operator()(const OpenGL::TextureCubeConfig& config) const noexcept { | ||||||
|  |         return config.Hash(); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | } // namespace std
 | ||||||
|  | @ -6,17 +6,11 @@ | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <climits> | #include <climits> | ||||||
| #include <boost/icl/interval.hpp> |  | ||||||
| #include "common/math_util.h" |  | ||||||
| #include "video_core/rasterizer_cache/pixel_format.h" | #include "video_core/rasterizer_cache/pixel_format.h" | ||||||
|  | #include "video_core/rasterizer_cache/rasterizer_cache_types.h" | ||||||
| 
 | 
 | ||||||
| namespace OpenGL { | namespace OpenGL { | ||||||
| 
 | 
 | ||||||
| struct CachedSurface; |  | ||||||
| using Surface = std::shared_ptr<CachedSurface>; |  | ||||||
| 
 |  | ||||||
| using SurfaceInterval = boost::icl::right_open_interval<PAddr>; |  | ||||||
| 
 |  | ||||||
| class SurfaceParams { | class SurfaceParams { | ||||||
| public: | public: | ||||||
|     // Surface match traits
 |     // Surface match traits
 | ||||||
|  |  | ||||||
|  | @ -4,15 +4,11 @@ | ||||||
| 
 | 
 | ||||||
| #include <chrono> | #include <chrono> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 |  | ||||||
| #include <fmt/chrono.h> | #include <fmt/chrono.h> | ||||||
| 
 |  | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "video_core/rasterizer_cache/rasterizer_cache.h" | #include "video_core/rasterizer_cache/rasterizer_cache.h" | ||||||
| #include "video_core/renderer_opengl/gl_state.h" | #include "video_core/renderer_opengl/gl_state.h" | ||||||
| #include "video_core/renderer_opengl/gl_vars.h" |  | ||||||
| #include "video_core/renderer_opengl/texture_downloader_es.h" | #include "video_core/renderer_opengl/texture_downloader_es.h" | ||||||
| 
 |  | ||||||
| #include "shaders/depth_to_color.frag" | #include "shaders/depth_to_color.frag" | ||||||
| #include "shaders/depth_to_color.vert" | #include "shaders/depth_to_color.vert" | ||||||
| #include "shaders/ds_to_color.frag" | #include "shaders/ds_to_color.frag" | ||||||
|  | @ -78,13 +74,13 @@ void TextureDownloaderES::Test() { | ||||||
|             } |             } | ||||||
|     }; |     }; | ||||||
|     LOG_INFO(Render_OpenGL, "GL_DEPTH24_STENCIL8 download test starting"); |     LOG_INFO(Render_OpenGL, "GL_DEPTH24_STENCIL8 download test starting"); | ||||||
|     test(depth_format_tuples[3], std::vector<u32>{}, 4096, |     test(GetFormatTuple(PixelFormat::D24S8), std::vector<u32>{}, 4096, | ||||||
|          [](std::size_t idx) { return static_cast<u32>((idx << 8) | (idx & 0xFF)); }); |          [](std::size_t idx) { return static_cast<u32>((idx << 8) | (idx & 0xFF)); }); | ||||||
|     LOG_INFO(Render_OpenGL, "GL_DEPTH_COMPONENT24 download test starting"); |     LOG_INFO(Render_OpenGL, "GL_DEPTH_COMPONENT24 download test starting"); | ||||||
|     test(depth_format_tuples[2], std::vector<u32>{}, 4096, |     test(GetFormatTuple(PixelFormat::D24), std::vector<u32>{}, 4096, | ||||||
|          [](std::size_t idx) { return static_cast<u32>(idx << 8); }); |          [](std::size_t idx) { return static_cast<u32>(idx << 8); }); | ||||||
|     LOG_INFO(Render_OpenGL, "GL_DEPTH_COMPONENT16 download test starting"); |     LOG_INFO(Render_OpenGL, "GL_DEPTH_COMPONENT16 download test starting"); | ||||||
|     test(depth_format_tuples[0], std::vector<u16>{}, 256, |     test(GetFormatTuple(PixelFormat::D16), std::vector<u16>{}, 256, | ||||||
|          [](std::size_t idx) { return static_cast<u16>(idx); }); |          [](std::size_t idx) { return static_cast<u16>(idx); }); | ||||||
| 
 | 
 | ||||||
|     cur_state.Apply(); |     cur_state.Apply(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue