mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
vk: Workaround for slow bo transfer (pinned<->VRAM) when using RADV
- perf shows extremely high number of cycles wasted in memmove glibc method
This commit is contained in:
parent
6fed80333c
commit
56f7359da4
1 changed files with 11 additions and 2 deletions
|
@ -880,7 +880,7 @@ namespace vk
|
|||
VkImageAspectFlags flags, vk::data_heap &upload_heap, u32 heap_align, rsx::flags32_t image_setup_flags)
|
||||
{
|
||||
const bool requires_depth_processing = (dst_image->aspect() & VK_IMAGE_ASPECT_STENCIL_BIT) || (format == CELL_GCM_TEXTURE_DEPTH16_FLOAT);
|
||||
rsx::texture_uploader_capabilities caps{ .alignment = heap_align };
|
||||
rsx::texture_uploader_capabilities caps{ .supports_zero_copy = true, .alignment = heap_align };
|
||||
rsx::texture_memory_info opt{};
|
||||
bool check_caps = true;
|
||||
|
||||
|
@ -896,6 +896,15 @@ namespace vk
|
|||
std::vector<std::pair<VkBuffer, u32>> upload_commands;
|
||||
copy_regions.reserve(subresource_layout.size());
|
||||
|
||||
#ifndef _WIN32
|
||||
// RADV workaround. Buffer-to-buffer transfers are extremely slow and invoke memmove in vkCmdCopyBuffer.
|
||||
if (const auto vendor = vk::get_driver_vendor();
|
||||
vendor == driver_vendor::RADV)
|
||||
{
|
||||
caps.supports_zero_copy = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (const rsx::subresource_layout &layout : subresource_layout)
|
||||
{
|
||||
const auto [row_pitch, upload_pitch_in_texel] = calculate_upload_pitch(format, heap_align, dst_image, layout);
|
||||
|
@ -913,7 +922,7 @@ namespace vk
|
|||
{
|
||||
caps.supports_byteswap = (image_linear_size >= 1024);
|
||||
caps.supports_hw_deswizzle = caps.supports_byteswap;
|
||||
caps.supports_zero_copy = caps.supports_byteswap;
|
||||
caps.supports_zero_copy = caps.supports_zero_copy && caps.supports_byteswap;
|
||||
caps.supports_vtc_decoding = false;
|
||||
check_caps = false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue