From 270e89c3eace60bbc81efe221dc10eba0bd771a3 Mon Sep 17 00:00:00 2001 From: IndecisiveTurtle <47210458+raphaelthegreat@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:20:40 +0300 Subject: [PATCH] video_core: Hopefully fix some vertex explosions --- src/core/libraries/network/net.cpp | 2 -- src/video_core/buffer_cache/buffer_cache.cpp | 9 ++++++--- src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 3 +-- src/video_core/texture_cache/image.h | 1 - src/video_core/texture_cache/texture_cache.cpp | 1 - src/video_core/texture_cache/texture_cache.h | 1 - 6 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/core/libraries/network/net.cpp b/src/core/libraries/network/net.cpp index 9c467a104..2c03dde3e 100644 --- a/src/core/libraries/network/net.cpp +++ b/src/core/libraries/network/net.cpp @@ -10,7 +10,6 @@ #include #endif -#include #include "common/assert.h" #include "common/logging/log.h" #include "core/libraries/error_codes.h" @@ -560,7 +559,6 @@ int PS4_SYSV_ABI sceNetEpollDestroy() { } int PS4_SYSV_ABI sceNetEpollWait() { - std::this_thread::sleep_for(std::chrono::microseconds(1)); LOG_TRACE(Lib_Net, "(STUBBED) called"); return ORBIS_OK; } diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index 123bbe5ef..89032e990 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -542,13 +542,16 @@ void BufferCache::SynchronizeBuffer(Buffer& buffer, VAddr device_addr, u32 size, bool BufferCache::SynchronizeBufferFromImage(Buffer& buffer, VAddr device_addr, u32 size) { boost::container::small_vector image_ids; - size = std::min(size, MaxInvalidateDist); - texture_cache.ForEachImageInRegion(device_addr, size, [&](ImageId image_id, Image& image) { + const u32 inv_size = std::min(size, MaxInvalidateDist); + texture_cache.ForEachImageInRegion(device_addr, inv_size, [&](ImageId image_id, Image& image) { + // Only consider GPU modified images, i.e render targets or storage images. + // Also avoid any CPU modified images as the image data is likely to be stale. if (True(image.flags & ImageFlagBits::CpuModified) || False(image.flags & ImageFlagBits::GpuModified)) { return; } - if (image.cpu_addr < device_addr || image.cpu_addr > device_addr + size) { + // Image must fully overlap with the provided buffer range. + if (image.cpu_addr < device_addr || image.cpu_addr_end > device_addr + size) { return; } image_ids.push_back(image_id); diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 54ff3eb20..33971cc5a 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -179,8 +179,7 @@ const ComputePipeline* PipelineCache::GetComputePipeline() { } bool ShouldSkipShader(u64 shader_hash, const char* shader_type) { - static constexpr std::array skip_hashes = { - 0x42f2a521, 0x2da7fe60, 0x8e3f8dc4, 0xa509af23, 0x4ca76892, 0xa954e79d, 0x1635154c}; + static constexpr std::array skip_hashes = {}; if (std::ranges::contains(skip_hashes, shader_hash)) { LOG_WARNING(Render_Vulkan, "Skipped {} shader hash {:#x}.", shader_type, shader_hash); return true; diff --git a/src/video_core/texture_cache/image.h b/src/video_core/texture_cache/image.h index 11ccdc1d1..f932b25a0 100644 --- a/src/video_core/texture_cache/image.h +++ b/src/video_core/texture_cache/image.h @@ -117,7 +117,6 @@ struct Image { vk::ImageLayout layout = vk::ImageLayout::eUndefined; boost::container::small_vector mip_hashes; u64 tick_accessed_last{0}; - u64 modification_tick{0}; }; } // namespace VideoCore diff --git a/src/video_core/texture_cache/texture_cache.cpp b/src/video_core/texture_cache/texture_cache.cpp index 4ad50c65f..0d0c81f5d 100644 --- a/src/video_core/texture_cache/texture_cache.cpp +++ b/src/video_core/texture_cache/texture_cache.cpp @@ -220,7 +220,6 @@ ImageId TextureCache::FindImage(const ImageInfo& info, FindFlags flags) { Image& image = slot_images[image_id]; image.tick_accessed_last = scheduler.CurrentTick(); - image.modification_tick = ++modification_tick; return image_id; } diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 3a305452d..44bc2b431 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -212,7 +212,6 @@ private: tsl::robin_map samplers; PageTable page_table; std::mutex mutex; - u64 modification_tick{0}; struct MetaDataInfo { enum class Type {