Skip to content

Commit e0c3df5

Browse files
kd-11AniLeo
authored andcommitted
vk: Fix crash when running CPU detiler path
1 parent 59468f1 commit e0c3df5

3 files changed

Lines changed: 9 additions & 7 deletions

File tree

rpcs3/Emu/RSX/VK/VKHelpers.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,11 @@ namespace vk
7171

7272
enum image_upload_options
7373
{
74-
upload_contents_async = 1,
75-
initialize_image_layout = 2,
76-
preserve_image_layout = 4,
77-
source_is_gpu_resident = 8,
74+
upload_contents_async = 0x0001,
75+
initialize_image_layout = 0x0002,
76+
preserve_image_layout = 0x0004,
77+
source_is_gpu_resident = 0x0008,
78+
source_is_userptr = 0x0010,
7879

7980
// meta-flags
8081
upload_contents_inline = 0,

rpcs3/Emu/RSX/VK/VKRenderTargets.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ namespace vk
724724
subres.height_in_block
725725
);
726726
subres.data = std::span(ext_data);
727+
upload_flags |= source_is_userptr;
727728
#else
728729
const auto [scratch_buf, linear_data_scratch_offset] = vk::detile_memory_block(cmd, tiled_region, range, subres.width_in_block, subres.height_in_block, get_bpp());
729730

rpcs3/Emu/RSX/VK/VKTexture.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ namespace vk
990990
auto pdev = vk::get_current_renderer();
991991
rsx::texture_uploader_capabilities caps{ .supports_dxt = pdev->get_texture_compression_bc_support(), .alignment = heap_align };
992992
rsx::texture_memory_info opt{};
993-
bool check_caps = true;
993+
bool check_hw_caps = !(image_setup_flags & source_is_userptr);
994994

995995
vk::buffer* scratch_buf = nullptr;
996996
u32 scratch_offset = 0;
@@ -1015,13 +1015,13 @@ namespace vk
10151015
image_linear_size = row_pitch * layout.depth * (rsx::is_compressed_host_format(caps, format) ? layout.height_in_block : layout.height_in_texel);
10161016

10171017
// Only do GPU-side conversion if occupancy is good
1018-
if (check_caps)
1018+
if (check_hw_caps)
10191019
{
10201020
caps.supports_byteswap = (image_linear_size >= 1024) || (image_setup_flags & source_is_gpu_resident);
10211021
caps.supports_hw_deswizzle = caps.supports_byteswap;
10221022
caps.supports_zero_copy = caps.supports_byteswap;
10231023
caps.supports_vtc_decoding = false;
1024-
check_caps = false;
1024+
check_hw_caps = false;
10251025
}
10261026

10271027
auto buf_allocator = [&](usz) -> std::tuple<void*, usz>

0 commit comments

Comments
 (0)