diff options
| author | 2024-02-27 09:42:15 -0500 | |
|---|---|---|
| committer | 2024-02-27 15:42:15 +0100 | |
| commit | 6948ac8c1622ebb3f9da065d3678e571b7ff726e (patch) | |
| tree | 1cfed7dc79952d21efc54a265988fd0a4e225230 /src/video_core/renderer_vulkan | |
| parent | vk_rasterizer: flip scissor y on lower left origin mode (#13122) (diff) | |
| download | yuzu-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.cpp | 14 |
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}; |