Fix fast buffers without performance loss
All checks were successful
eden-license / license-header (pull_request) Successful in 25s
All checks were successful
eden-license / license-header (pull_request) Successful in 25s
This commit is contained in:
parent
02016697d6
commit
d7fae4c482
1 changed files with 4 additions and 5 deletions
|
@ -792,10 +792,6 @@ void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32
|
|||
const u32 size = (std::min)(binding.size, (*channel_state->uniform_buffer_sizes)[stage][index]);
|
||||
Buffer& buffer = slot_buffers[binding.buffer_id];
|
||||
TouchBuffer(buffer, binding.buffer_id);
|
||||
const bool sync_buffer = SynchronizeBuffer(buffer, device_addr, size);
|
||||
if (sync_buffer) {
|
||||
++channel_state->uniform_cache_hits[0];
|
||||
}
|
||||
++channel_state->uniform_cache_shots[0];
|
||||
const bool use_fast_buffer = binding.buffer_id != NULL_BUFFER_ID &&
|
||||
size <= channel_state->uniform_buffer_skip_cache_size &&
|
||||
|
@ -827,7 +823,10 @@ void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32
|
|||
device_memory.ReadBlockUnsafe(device_addr, span.data(), size);
|
||||
return;
|
||||
}
|
||||
|
||||
// Classic cached path
|
||||
if (SynchronizeBuffer(buffer, device_addr, size)) {
|
||||
++channel_state->uniform_cache_hits[0];
|
||||
}
|
||||
// Skip binding if it's not needed and if the bound buffer is not the fast version
|
||||
// This exists to avoid instances where the fast buffer is bound and a GPU write happens
|
||||
needs_bind |= HasFastUniformBufferBound(stage, binding_index);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue