From d0148728c6344beec70048d77f87861360d00967 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 21 Sep 2017 18:40:47 +0300 Subject: [PATCH] rsx: Fixes - Fix section scanning range for early reject - Specify IMAGE_ASPECT_STENCIL when uploading image_from_cpu --- rpcs3/Emu/RSX/Common/texture_cache.h | 15 +++++++-------- rpcs3/Emu/RSX/VK/VKTextureCache.h | 8 ++++++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/texture_cache.h b/rpcs3/Emu/RSX/Common/texture_cache.h index 5d42a0a398..3fa96b8638 100644 --- a/rpcs3/Emu/RSX/Common/texture_cache.h +++ b/rpcs3/Emu/RSX/Common/texture_cache.h @@ -115,21 +115,20 @@ namespace rsx void notify(u32 addr, u32 data_size) { verify(HERE), valid_count >= 0; - max_range = std::max(data_size, max_range); + + const u32 addr_base = addr & ~0xfff; + const u32 block_sz = align(addr + data_size, 4096u) - addr_base; + + max_range = std::max(max_range, block_sz); max_addr = std::max(max_addr, addr); - min_addr = std::min(min_addr, addr); + min_addr = std::min(min_addr, addr_base); valid_count++; } void add(section_storage_type& section, u32 addr, u32 data_size) { - verify(HERE), valid_count >= 0; - max_range = std::max(data_size, max_range); - max_addr = std::max(max_addr, addr); - min_addr = std::min(min_addr, addr); - valid_count++; - data.push_back(std::move(section)); + notify(addr, data_size); } void remove_one() diff --git a/rpcs3/Emu/RSX/VK/VKTextureCache.h b/rpcs3/Emu/RSX/VK/VKTextureCache.h index b4f125f91b..76fa03f312 100644 --- a/rpcs3/Emu/RSX/VK/VKTextureCache.h +++ b/rpcs3/Emu/RSX/VK/VKTextureCache.h @@ -518,6 +518,14 @@ namespace vk auto image = section->get_raw_texture(); auto subres_range = section->get_raw_view()->info.subresourceRange; + switch (image->info.format) + { + case VK_FORMAT_D32_SFLOAT_S8_UINT: + case VK_FORMAT_D24_UNORM_S8_UINT: + subres_range.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT; + break; + } + change_image_layout(cmd, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, subres_range); vk::enter_uninterruptible();