Compare commits
3 commits
e5fb598d77
...
4e65e3b192
Author | SHA1 | Date | |
---|---|---|---|
4e65e3b192 | |||
d79d30bd61 | |||
c725641f13 |
1 changed files with 6 additions and 8 deletions
|
@ -785,18 +785,13 @@ void BufferCache<P>::BindHostGraphicsUniformBuffers(size_t stage) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class P>
|
template <class P>
|
||||||
void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32 binding_index,
|
void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32 binding_index, bool needs_bind) {
|
||||||
bool needs_bind) {
|
++channel_state->uniform_cache_shots[0];
|
||||||
const Binding& binding = channel_state->uniform_buffers[stage][index];
|
const Binding& binding = channel_state->uniform_buffers[stage][index];
|
||||||
const DAddr device_addr = binding.device_addr;
|
const DAddr device_addr = binding.device_addr;
|
||||||
const u32 size = (std::min)(binding.size, (*channel_state->uniform_buffer_sizes)[stage][index]);
|
const u32 size = (std::min)(binding.size, (*channel_state->uniform_buffer_sizes)[stage][index]);
|
||||||
Buffer& buffer = slot_buffers[binding.buffer_id];
|
Buffer& buffer = slot_buffers[binding.buffer_id];
|
||||||
TouchBuffer(buffer, 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 &&
|
const bool use_fast_buffer = binding.buffer_id != NULL_BUFFER_ID &&
|
||||||
size <= channel_state->uniform_buffer_skip_cache_size &&
|
size <= channel_state->uniform_buffer_skip_cache_size &&
|
||||||
!memory_tracker.IsRegionGpuModified(device_addr, size);
|
!memory_tracker.IsRegionGpuModified(device_addr, size);
|
||||||
|
@ -827,7 +822,10 @@ void BufferCache<P>::BindHostGraphicsUniformBuffer(size_t stage, u32 index, u32
|
||||||
device_memory.ReadBlockUnsafe(device_addr, span.data(), size);
|
device_memory.ReadBlockUnsafe(device_addr, span.data(), size);
|
||||||
return;
|
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
|
// 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
|
// This exists to avoid instances where the fast buffer is bound and a GPU write happens
|
||||||
needs_bind |= HasFastUniformBufferBound(stage, binding_index);
|
needs_bind |= HasFastUniformBufferBound(stage, binding_index);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue