From 38e0b6e2ab53374e7335fee94209bb90cb3e9ed2 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 21 Jan 2018 23:13:25 +1000 Subject: AbstractTexture: Move Bind() method to Renderer This makes state tracking simpler, and enables easier porting to command lists later on. --- Source/Core/VideoBackends/Vulkan/Renderer.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Source/Core/VideoBackends/Vulkan/Renderer.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp index a146351007..ea5e310a57 100644 --- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp +++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp @@ -8,6 +8,7 @@ #include #include +#include "Common/Assert.h" #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" @@ -848,6 +849,15 @@ void Renderer::SetBlendingState(const BlendingState& state) StateTracker::GetInstance()->SetBlendState(state); } +void Renderer::SetTexture(u32 index, const AbstractTexture* texture) +{ + // Texture should always be in SHADER_READ_ONLY layout prior to use. + // This is so we don't need to transition during render passes. + auto* tex = texture ? static_cast(texture)->GetRawTexIdentifier() : nullptr; + _dbg_assert_(VIDEO, !tex || tex->GetLayout() == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + StateTracker::GetInstance()->SetTexture(index, tex ? tex->GetView() : VK_NULL_HANDLE); +} + void Renderer::SetSamplerState(u32 index, const SamplerState& state) { // Skip lookup if the state hasn't changed. @@ -866,6 +876,12 @@ void Renderer::SetSamplerState(u32 index, const SamplerState& state) m_sampler_states[index].hex = state.hex; } +void Renderer::UnbindTexture(const AbstractTexture* texture) +{ + StateTracker::GetInstance()->UnbindTexture( + static_cast(texture)->GetRawTexIdentifier()->GetView()); +} + void Renderer::ResetSamplerStates() { // Ensure none of the sampler objects are in use. -- cgit v1.2.3