summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2017-04-15 19:55:32 +1000
committerStenzek <stenzek@gmail.com>2017-04-15 19:55:32 +1000
commit69b0a3193813c1b1c45b90dba2ea3aaaf356d96b (patch)
tree4d06371629a7883b849c0538bf3be673fdfd4ecb /Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp
parenteef7b6cf7af7c66ac8f3d047bb4fe732cf5c9db7 (diff)
Vulkan: Clamp framebuffer resolve rectangle to texture size
This is invalid and was causing the NVIDIA driver to throw an error.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp')
-rw-r--r--Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp
index 9b07f8645e..f4caacfc6a 100644
--- a/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp
+++ b/Source/Core/VideoBackends/Vulkan/FramebufferManager.cpp
@@ -462,6 +462,12 @@ Texture2D* FramebufferManager::ResolveEFBColorTexture(const VkRect2D& region)
// Can't resolve within a render pass.
StateTracker::GetInstance()->EndRenderPass();
+ // It's not valid to resolve out-of-bounds coordinates.
+ // Ensuring the region is within the image is the caller's responsibility.
+ _assert_(region.offset.x >= 0 && region.offset.y >= 0 &&
+ (static_cast<u32>(region.offset.x) + region.extent.width) <= m_efb_width &&
+ (static_cast<u32>(region.offset.y) + region.extent.height) <= m_efb_height);
+
// Resolving is considered to be a transfer operation.
m_efb_color_texture->TransitionToLayout(g_command_buffer_mgr->GetCurrentCommandBuffer(),
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);