Accuracy Normal: reduce accuracy further for perf improvements in Project Lime
This commit is contained in:
parent
fca72beb2d
commit
7e76c1642c
4 changed files with 11 additions and 5 deletions
|
@ -462,7 +462,7 @@ struct Memory::Impl {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Settings::IsFastmemEnabled()) {
|
if (Settings::IsFastmemEnabled()) {
|
||||||
const bool is_read_enable = Settings::IsGPULevelHigh() || !cached;
|
const bool is_read_enable = !Settings::IsGPULevelExtreme() || !cached;
|
||||||
system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached);
|
system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,19 +64,24 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalFence(std::function<void()>&& func) {
|
void SignalFence(std::function<void()>&& func) {
|
||||||
|
bool delay_fence = Settings::IsGPULevelHigh();
|
||||||
if constexpr (!can_async_check) {
|
if constexpr (!can_async_check) {
|
||||||
TryReleasePendingFences<false>();
|
TryReleasePendingFences<false>();
|
||||||
}
|
}
|
||||||
std::function<void()> callback = std::move(func);
|
|
||||||
const bool should_flush = ShouldFlush();
|
const bool should_flush = ShouldFlush();
|
||||||
CommitAsyncFlushes();
|
CommitAsyncFlushes();
|
||||||
TFence new_fence = CreateFence(!should_flush);
|
TFence new_fence = CreateFence(!should_flush);
|
||||||
if constexpr (can_async_check) {
|
if constexpr (can_async_check) {
|
||||||
guard.lock();
|
guard.lock();
|
||||||
}
|
}
|
||||||
|
if (delay_fence) {
|
||||||
|
uncommitted_operations.emplace_back(std::move(func));
|
||||||
|
}
|
||||||
pending_operations.emplace_back(std::move(uncommitted_operations));
|
pending_operations.emplace_back(std::move(uncommitted_operations));
|
||||||
QueueFence(new_fence);
|
QueueFence(new_fence);
|
||||||
callback();
|
if (!delay_fence) {
|
||||||
|
func();
|
||||||
|
}
|
||||||
fences.push(std::move(new_fence));
|
fences.push(std::move(new_fence));
|
||||||
if (should_flush) {
|
if (should_flush) {
|
||||||
rasterizer.FlushCommands();
|
rasterizer.FlushCommands();
|
||||||
|
|
|
@ -98,8 +98,9 @@ HostCounter::HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> depend
|
||||||
query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {
|
query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {
|
||||||
const vk::Device* logical = &cache.GetDevice().GetLogical();
|
const vk::Device* logical = &cache.GetDevice().GetLogical();
|
||||||
cache.GetScheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) {
|
cache.GetScheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) {
|
||||||
|
const bool use_precise = Settings::IsGPULevelHigh();
|
||||||
logical->ResetQueryPool(query.first, query.second, 1);
|
logical->ResetQueryPool(query.first, query.second, 1);
|
||||||
cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT);
|
cmdbuf.BeginQuery(query.first, query.second, use_precise ? VK_QUERY_CONTROL_PRECISE_BIT : 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -675,7 +675,7 @@ bool RasterizerVulkan::AccelerateConditionalRendering() {
|
||||||
const GPUVAddr condition_address{maxwell3d->regs.render_enable.Address()};
|
const GPUVAddr condition_address{maxwell3d->regs.render_enable.Address()};
|
||||||
Maxwell::ReportSemaphore::Compare cmp;
|
Maxwell::ReportSemaphore::Compare cmp;
|
||||||
if (gpu_memory->IsMemoryDirty(condition_address, sizeof(cmp),
|
if (gpu_memory->IsMemoryDirty(condition_address, sizeof(cmp),
|
||||||
VideoCommon::CacheType::BufferCache)) {
|
VideoCommon::CacheType::BufferCache | VideoCommon::CacheType::QueryCache)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue