Query Cache: Fix behavior in Normal Accuracy
This commit is contained in:
		| @@ -256,6 +256,7 @@ void QueryCacheBase<Traits>::CounterReport(GPUVAddr addr, QueryType counter_type | ||||
|     u8* pointer = impl->cpu_memory.GetPointer(cpu_addr); | ||||
|     u8* pointer_timestamp = impl->cpu_memory.GetPointer(cpu_addr + 8); | ||||
|     bool is_synced = !Settings::IsGPULevelHigh() && is_fence; | ||||
|  | ||||
|     std::function<void()> operation([this, is_synced, streamer, query_base = query, query_location, | ||||
|                                      pointer, pointer_timestamp] { | ||||
|         if (True(query_base->flags & QueryFlagBits::IsInvalidated)) { | ||||
| @@ -285,6 +286,18 @@ void QueryCacheBase<Traits>::CounterReport(GPUVAddr addr, QueryType counter_type | ||||
|     if (is_fence) { | ||||
|         impl->rasterizer.SignalFence(std::move(operation)); | ||||
|     } else { | ||||
|         if (!Settings::IsGPULevelHigh() && counter_type == QueryType::Payload) { | ||||
|             if (has_timestamp) { | ||||
|                 u64 timestamp = impl->gpu.GetTicks(); | ||||
|                 u64 value = static_cast<u64>(payload); | ||||
|                 std::memcpy(pointer_timestamp, ×tamp, sizeof(timestamp)); | ||||
|                 std::memcpy(pointer, &value, sizeof(value)); | ||||
|             } else { | ||||
|                 std::memcpy(pointer, &payload, sizeof(payload)); | ||||
|             } | ||||
|             streamer->Free(new_query_id); | ||||
|             return; | ||||
|         } | ||||
|         impl->rasterizer.SyncOperation(std::move(operation)); | ||||
|     } | ||||
|     if (is_synced) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
					Fernando Sahmkow