Address some regressions with unswizzle changes + barriers reductions

This commit is contained in:
CamilleLaVey
2026-10-02 01:41:19 -04:00
parent b8478a570b
commit 0b7d216a09
3 changed files with 10 additions and 12 deletions
@@ -697,8 +697,7 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
}
const VkImageAspectFlags aspect_mask = image.AspectMask();
const VkImage vk_image = image.Handle();
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask,
image.ExchangeInitialization());
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask, !reorder);
for (const VideoCommon::SwizzleParameters& swizzle : swizzles) {
const size_t input_offset = swizzle.buffer_offset + map.offset;
const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 8U);
@@ -760,8 +759,7 @@ void BlockLinearUnswizzleImage2DPass::Unswizzle(
}
const VkImageAspectFlags aspect_mask = image.AspectMask();
const VkImage vk_image = image.Handle();
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask,
image.ExchangeInitialization());
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask, !reorder);
for (const VideoCommon::SwizzleParameters& swizzle : swizzles) {
const size_t input_offset = swizzle.buffer_offset + map.offset;
const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 32U);
@@ -810,8 +808,7 @@ void BlockLinearUnswizzleImage3DPass::Unswizzle(
}
const VkImageAspectFlags aspect_mask = image.AspectMask();
const VkImage vk_image = image.Handle();
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask,
image.ExchangeInitialization());
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask, !reorder);
for (const VideoCommon::SwizzleParameters& swizzle : swizzles) {
const size_t input_offset = swizzle.buffer_offset + map.offset;
const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 16U);
@@ -873,8 +870,7 @@ void PitchUnswizzlePass::Unswizzle(Image& image, const StagingBufferRef& map,
}
const VkImageAspectFlags aspect_mask = image.AspectMask();
const VkImage vk_image = image.Handle();
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask,
image.ExchangeInitialization());
RecordUnswizzleBeginBarrier(scheduler, reorder, *pipeline, vk_image, aspect_mask, !reorder);
for (const VideoCommon::SwizzleParameters& swizzle : swizzles) {
const size_t input_offset = swizzle.buffer_offset + map.offset;
const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 32U);
+3 -4
View File
@@ -1029,6 +1029,8 @@ void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) {
runtime.TransitionImageLayout(image);
return;
}
gpu_memory->FlushRegion(image.gpu_addr, image.guest_size_bytes,
VideoCommon::CacheType::NoTextureCache);
if (True(image.flags & ImageFlagBits::AsynchronousDecode)) {
QueueAsyncDecode(image, image_id);
return;
@@ -1042,8 +1044,6 @@ void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) {
device_memory.GetSpan(*device_addr, image.guest_size_bytes),
image.guest_size_bytes);
if (source) {
gpu_memory->FlushRegion(image.gpu_addr, image.guest_size_bytes,
VideoCommon::CacheType::NoTextureCache);
runtime.AccelerateImageUpload(
image, *source, FixSmallVectorADL(FullUploadSwizzles(image.info)));
return;
@@ -1076,8 +1076,7 @@ void TextureCache<P>::UploadImageContents(Image& image, StagingBuffer& staging)
const GPUVAddr gpu_addr = image.gpu_addr;
if (True(image.flags & ImageFlagBits::AcceleratedUpload)) {
gpu_memory->ReadBlock(gpu_addr, mapped_span.data(), image.guest_size_bytes,
VideoCommon::CacheType::NoTextureCache);
gpu_memory->ReadBlockUnsafe(gpu_addr, mapped_span.data(), image.guest_size_bytes);
const auto uploads = FullUploadSwizzles(image.info);
runtime.AccelerateImageUpload(image, staging, FixSmallVectorADL(uploads));
return;
@@ -879,6 +879,9 @@ bool Device::ShouldBoostClocks() const {
}
bool Device::HasTimelineSemaphore() const {
if (GetDriverID() == VK_DRIVER_ID_MESA_TURNIP) {
return false;
}
return features.timeline_semaphore.timelineSemaphore;
}