summaryrefslogtreecommitdiffstats
path: root/src/video_core
diff options
context:
space:
mode:
authorFernandoS27 <fsahmkow27@gmail.com>2018-10-13 04:06:04 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2018-12-09 22:22:29 +0100
commit7b9c982d297f15c9fc30cd0cd68508b7df46cf45 (patch)
tree609853b36f20ed8f8a180483ed94c7a2ec886ac2 /src/video_core
parentMerge pull request #1868 from lioncash/config (diff)
downloadyuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar.gz
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar.bz2
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar.lz
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar.xz
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.tar.zst
yuzu-7b9c982d297f15c9fc30cd0cd68508b7df46cf45.zip
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp7
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.h52
2 files changed, 57 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index 5f4cdd119..cfc0dae29 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -107,6 +107,7 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
params.height = Common::AlignUp(config.tic.Height(), GetCompressionFactor(params.pixel_format));
params.unaligned_height = config.tic.Height();
params.target = SurfaceTargetFromTextureType(config.tic.texture_type);
+ params.identity = SurfaceClass::Uploaded;
switch (params.target) {
case SurfaceTarget::Texture1D:
@@ -173,6 +174,7 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
params.height = config.height;
params.unaligned_height = config.height;
params.target = SurfaceTarget::Texture2D;
+ params.identity = SurfaceClass::RenderTarget;
params.depth = 1;
params.max_mip_level = 1;
params.is_layered = false;
@@ -208,6 +210,7 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
params.height = zeta_height;
params.unaligned_height = zeta_height;
params.target = SurfaceTarget::Texture2D;
+ params.identity = SurfaceClass::DepthBuffer;
params.depth = 1;
params.max_mip_level = 1;
params.is_layered = false;
@@ -236,6 +239,7 @@ std::size_t SurfaceParams::InnerMemorySize(bool force_gl, bool layer_only,
params.height = config.height;
params.unaligned_height = config.height;
params.target = SurfaceTarget::Texture2D;
+ params.identity = SurfaceClass::Copy;
params.depth = 1;
params.max_mip_level = 1;
params.rt = {};
@@ -560,8 +564,7 @@ CachedSurface::CachedSurface(const SurfaceParams& params)
glTexParameterf(SurfaceTargetToGL(params.target), GL_TEXTURE_LOD_BIAS, 1000.0);
}
- LabelGLObject(GL_TEXTURE, texture.handle, params.addr,
- SurfaceParams::SurfaceTargetName(params.target));
+ OpenGL::LabelGLObject(GL_TEXTURE, texture.handle, params.addr, params.IdentityString());
// Clamp size to mapped GPU memory region
// TODO(bunnei): Super Mario Odyssey maps a 0x40000 byte region and then uses it for a 0x80000
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
index c710aa245..ee158bd91 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
@@ -35,6 +35,14 @@ using PixelFormat = VideoCore::Surface::PixelFormat;
using ComponentType = VideoCore::Surface::ComponentType;
struct SurfaceParams {
+
+ enum class SurfaceClass {
+ Uploaded,
+ RenderTarget,
+ DepthBuffer,
+ Copy,
+ };
+
static std::string SurfaceTargetName(SurfaceTarget target) {
switch (target) {
case SurfaceTarget::Texture1D:
@@ -210,6 +218,48 @@ struct SurfaceParams {
/// Initializes parameters for caching, should be called after everything has been initialized
void InitCacheParameters(Tegra::GPUVAddr gpu_addr);
+ std::string TargetName() const {
+ switch (target) {
+ case SurfaceTarget::Texture1D:
+ return "1D";
+ case SurfaceTarget::Texture2D:
+ return "2D";
+ case SurfaceTarget::Texture3D:
+ return "3D";
+ case SurfaceTarget::Texture1DArray:
+ return "1DArray";
+ case SurfaceTarget::Texture2DArray:
+ return "2DArray";
+ case SurfaceTarget::TextureCubemap:
+ return "Cube";
+ default:
+ LOG_CRITICAL(HW_GPU, "Unimplemented surface_target={}", static_cast<u32>(target));
+ UNREACHABLE();
+ return fmt::format("TUK({})", static_cast<u32>(target));
+ }
+ }
+
+ std::string ClassName() const {
+ switch (identity) {
+ case SurfaceClass::Uploaded:
+ return "UP";
+ case SurfaceClass::RenderTarget:
+ return "RT";
+ case SurfaceClass::DepthBuffer:
+ return "DB";
+ case SurfaceClass::Copy:
+ return "CP";
+ default:
+ LOG_CRITICAL(HW_GPU, "Unimplemented surface_class={}", static_cast<u32>(identity));
+ UNREACHABLE();
+ return fmt::format("CUK({})", static_cast<u32>(identity));
+ }
+ }
+
+ std::string IdentityString() const {
+ return ClassName() + '_' + TargetName() + '_' + (is_tiled ? 'T' : 'L');
+ }
+
bool is_tiled;
u32 block_width;
u32 block_height;
@@ -223,6 +273,7 @@ struct SurfaceParams {
u32 depth;
u32 unaligned_height;
SurfaceTarget target;
+ SurfaceClass identity;
u32 max_mip_level;
bool is_layered;
bool srgb_conversion;
@@ -255,6 +306,7 @@ struct SurfaceReserveKey : Common::HashableStruct<OpenGL::SurfaceParams> {
static SurfaceReserveKey Create(const OpenGL::SurfaceParams& params) {
SurfaceReserveKey res;
res.state = params;
+ res.state.identity = {}; // Ignore the origin of the texture
res.state.gpu_addr = {}; // Ignore GPU vaddr in caching
res.state.rt = {}; // Ignore rt config in caching
return res;