From 2cdc93f4ab690279df064832d4c9688741556f0c Mon Sep 17 00:00:00 2001 From: iwubcode Date: Sat, 22 Apr 2017 23:44:34 -0500 Subject: Video Backends: Split texture cache code out into separate files, introduce 'AbstractTexture' --- .../Core/VideoBackends/Vulkan/FramebufferManager.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp index a17135fa35..3f76d180b0 100644 --- a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp @@ -22,10 +22,12 @@ #include "VideoBackends/Vulkan/Texture2D.h" #include "VideoBackends/Vulkan/TextureConverter.h" #include "VideoBackends/Vulkan/Util.h" +#include "VideoBackends/Vulkan/VKTexture.h" #include "VideoBackends/Vulkan/VertexFormat.h" #include "VideoBackends/Vulkan/VulkanContext.h" #include "VideoCommon/RenderBase.h" +#include "VideoCommon/TextureConfig.h" #include "VideoCommon/VideoConfig.h" namespace Vulkan @@ -1354,20 +1356,19 @@ std::unique_ptr FramebufferManager::CreateXFBSource(unsigned int unsigned int target_height, unsigned int layers) { - TextureCacheBase::TCacheEntryConfig config; + TextureConfig config; config.width = target_width; config.height = target_height; config.layers = layers; config.rendertarget = true; - auto* base_texture = TextureCache::GetInstance()->CreateTexture(config); - auto* texture = static_cast(base_texture); + auto texture = TextureCache::GetInstance()->CreateTexture(config); if (!texture) { PanicAlert("Failed to create texture for XFB source"); return nullptr; } - return std::make_unique(std::unique_ptr(texture)); + return std::make_unique(std::move(texture)); } void FramebufferManager::CopyToRealXFB(u32 xfb_addr, u32 fb_stride, u32 fb_height, @@ -1405,7 +1406,7 @@ void FramebufferManager::CopyToRealXFB(u32 xfb_addr, u32 fb_stride, u32 fb_heigh } } -XFBSource::XFBSource(std::unique_ptr texture) +XFBSource::XFBSource(std::unique_ptr texture) : XFBSourceBase(), m_texture(std::move(texture)) { } @@ -1414,13 +1415,18 @@ XFBSource::~XFBSource() { } +VKTexture* XFBSource::GetTexture() const +{ + return static_cast(m_texture.get()); +} + void XFBSource::DecodeToTexture(u32 xfb_addr, u32 fb_width, u32 fb_height) { // Guest memory -> GPU EFB Textures const u8* src_ptr = Memory::GetPointer(xfb_addr); _assert_(src_ptr); TextureCache::GetInstance()->GetTextureConverter()->DecodeYUYVTextureFromMemory( - m_texture.get(), src_ptr, fb_width, fb_width * 2, fb_height); + static_cast(m_texture.get()), src_ptr, fb_width, fb_width * 2, fb_height); } void XFBSource::CopyEFB(float gamma) @@ -1434,7 +1440,7 @@ void XFBSource::CopyEFB(float gamma) {static_cast(rect.GetWidth()), static_cast(rect.GetHeight())}}; Texture2D* src_texture = FramebufferManager::GetInstance()->ResolveEFBColorTexture(vk_rect); - TextureCache::GetInstance()->CopyRectangleFromTexture(m_texture.get(), rect, src_texture, rect); + static_cast(m_texture.get())->CopyRectangleFromTexture(src_texture, rect, rect); // If we sourced directly from the EFB framebuffer, restore it to a color attachment. if (src_texture == FramebufferManager::GetInstance()->GetEFBColorTexture()) -- cgit v1.2.3