summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar liamwhite2024-02-27 09:42:15 -0500
committerGravatar GitHub2024-02-27 15:42:15 +0100
commit6948ac8c1622ebb3f9da065d3678e571b7ff726e (patch)
tree1cfed7dc79952d21efc54a265988fd0a4e225230 /src/video_core/renderer_vulkan
parentvk_rasterizer: flip scissor y on lower left origin mode (#13122) (diff)
downloadyuzu-6948ac8c1622ebb3f9da065d3678e571b7ff726e.tar.gz
yuzu-6948ac8c1622ebb3f9da065d3678e571b7ff726e.tar.xz
yuzu-6948ac8c1622ebb3f9da065d3678e571b7ff726e.zip
general: workarounds for SMMU syncing issues (#12749)
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_query_cache.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp
index 7cbc9c73c..a28296bda 100644
--- a/src/video_core/renderer_vulkan/vk_query_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp
@@ -1064,8 +1064,6 @@ public:
1064 } 1064 }
1065 }); 1065 });
1066 } 1066 }
1067 auto* ptr = device_memory.GetPointer<u8>(new_query->dependant_address);
1068 ASSERT(ptr != nullptr);
1069 1067
1070 new_query->dependant_manage = must_manage_dependance; 1068 new_query->dependant_manage = must_manage_dependance;
1071 pending_flush_queries.push_back(index); 1069 pending_flush_queries.push_back(index);
@@ -1104,9 +1102,11 @@ public:
1104 tfb_streamer.Free(query->dependant_index); 1102 tfb_streamer.Free(query->dependant_index);
1105 } else { 1103 } else {
1106 u8* pointer = device_memory.GetPointer<u8>(query->dependant_address); 1104 u8* pointer = device_memory.GetPointer<u8>(query->dependant_address);
1107 u32 result; 1105 if (pointer != nullptr) {
1108 std::memcpy(&result, pointer, sizeof(u32)); 1106 u32 result;
1109 num_vertices = static_cast<u64>(result) / query->stride; 1107 std::memcpy(&result, pointer, sizeof(u32));
1108 num_vertices = static_cast<u64>(result) / query->stride;
1109 }
1110 } 1110 }
1111 query->value = [&]() -> u64 { 1111 query->value = [&]() -> u64 {
1112 switch (query->topology) { 1112 switch (query->topology) {
@@ -1360,7 +1360,9 @@ bool QueryCacheRuntime::HostConditionalRenderingCompareValues(VideoCommon::Looku
1360 const auto check_value = [&](DAddr address) { 1360 const auto check_value = [&](DAddr address) {
1361 u8* ptr = impl->device_memory.GetPointer<u8>(address); 1361 u8* ptr = impl->device_memory.GetPointer<u8>(address);
1362 u64 value{}; 1362 u64 value{};
1363 std::memcpy(&value, ptr, sizeof(value)); 1363 if (ptr != nullptr) {
1364 std::memcpy(&value, ptr, sizeof(value));
1365 }
1364 return value == 0; 1366 return value == 0;
1365 }; 1367 };
1366 std::array<VideoCommon::LookupData*, 2> objects{&object_1, &object_2}; 1368 std::array<VideoCommon::LookupData*, 2> objects{&object_1, &object_2};