Browse Source

payload based fence sync

xbzk/flicker-fix
xbzk 2 weeks ago
committed by crueter
parent
commit
f63b44c9ca
  1. 13
      src/video_core/query_cache/query_cache.h

13
src/video_core/query_cache/query_cache.h

@ -260,7 +260,8 @@ void QueryCacheBase<Traits>::CounterReport(GPUVAddr addr, QueryType counter_type
}; };
u8* pointer = impl->device_memory.template GetPointer<u8>(cpu_addr); u8* pointer = impl->device_memory.template GetPointer<u8>(cpu_addr);
u8* pointer_timestamp = impl->device_memory.template GetPointer<u8>(cpu_addr + 8); u8* pointer_timestamp = impl->device_memory.template GetPointer<u8>(cpu_addr + 8);
bool is_synced = !Settings::IsGPULevelHigh() && is_fence;
const bool is_payload = counter_type == QueryType::Payload;
const bool is_synced = !(Settings::getDebugKnobAt(0) && is_payload) && !Settings::IsGPULevelHigh() && is_fence;
std::function<void()> operation([this, is_synced, streamer, query_base = query, query_location, std::function<void()> operation([this, is_synced, streamer, query_base = query, query_location,
pointer, pointer_timestamp] { pointer, pointer_timestamp] {
if (True(query_base->flags & QueryFlagBits::IsInvalidated)) { if (True(query_base->flags & QueryFlagBits::IsInvalidated)) {
@ -292,9 +293,15 @@ void QueryCacheBase<Traits>::CounterReport(GPUVAddr addr, QueryType counter_type
} }
}); });
if (is_fence) { if (is_fence) {
impl->rasterizer.SignalFence(std::move(operation));
if (Settings::getDebugKnobAt(0) && is_payload) {
impl->rasterizer.SyncOperation(std::move(operation));
std::function<void()> noop([] {});
impl->rasterizer.SignalFence(std::move(noop));
} else {
impl->rasterizer.SignalFence(std::move(operation));
}
} else { } else {
if (!Settings::IsGPULevelHigh() && counter_type == QueryType::Payload) {
if (!Settings::IsGPULevelHigh() && is_payload) {
if (has_timestamp) { if (has_timestamp) {
u64 timestamp = impl->gpu.GetTicks(); u64 timestamp = impl->gpu.GetTicks();
u64 value = static_cast<u64>(payload); u64 value = static_cast<u64>(payload);

Loading…
Cancel
Save