forked from eden-emu/eden
		
	Merge pull request #10809 from Kelebek1/reduce_vertex_bindings
Synchronize vertex buffer even when it doesn't require binding
This commit is contained in:
		
						commit
						8acf728d5d
					
				
					 2 changed files with 16 additions and 13 deletions
				
			
		|  | @ -719,9 +719,15 @@ void BufferCache<P>::BindHostVertexBuffers() { | ||||||
|     bool any_valid{false}; |     bool any_valid{false}; | ||||||
|     auto& flags = maxwell3d->dirty.flags; |     auto& flags = maxwell3d->dirty.flags; | ||||||
|     for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) { |     for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) { | ||||||
|  |         const Binding& binding = channel_state->vertex_buffers[index]; | ||||||
|  |         Buffer& buffer = slot_buffers[binding.buffer_id]; | ||||||
|  |         TouchBuffer(buffer, binding.buffer_id); | ||||||
|  |         SynchronizeBuffer(buffer, binding.cpu_addr, binding.size); | ||||||
|         if (!flags[Dirty::VertexBuffer0 + index]) { |         if (!flags[Dirty::VertexBuffer0 + index]) { | ||||||
|             continue; |             continue; | ||||||
|         } |         } | ||||||
|  |         flags[Dirty::VertexBuffer0 + index] = false; | ||||||
|  | 
 | ||||||
|         host_bindings.min_index = std::min(host_bindings.min_index, index); |         host_bindings.min_index = std::min(host_bindings.min_index, index); | ||||||
|         host_bindings.max_index = std::max(host_bindings.max_index, index); |         host_bindings.max_index = std::max(host_bindings.max_index, index); | ||||||
|         any_valid = true; |         any_valid = true; | ||||||
|  | @ -735,9 +741,6 @@ void BufferCache<P>::BindHostVertexBuffers() { | ||||||
|             const Binding& binding = channel_state->vertex_buffers[index]; |             const Binding& binding = channel_state->vertex_buffers[index]; | ||||||
|             Buffer& buffer = slot_buffers[binding.buffer_id]; |             Buffer& buffer = slot_buffers[binding.buffer_id]; | ||||||
| 
 | 
 | ||||||
|             TouchBuffer(buffer, binding.buffer_id); |  | ||||||
|             SynchronizeBuffer(buffer, binding.cpu_addr, binding.size); |  | ||||||
| 
 |  | ||||||
|             const u32 stride = maxwell3d->regs.vertex_streams[index].stride; |             const u32 stride = maxwell3d->regs.vertex_streams[index].stride; | ||||||
|             const u32 offset = buffer.Offset(binding.cpu_addr); |             const u32 offset = buffer.Offset(binding.cpu_addr); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -516,15 +516,15 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bi | ||||||
|         buffer_handles.push_back(handle); |         buffer_handles.push_back(handle); | ||||||
|     } |     } | ||||||
|     if (device.IsExtExtendedDynamicStateSupported()) { |     if (device.IsExtExtendedDynamicStateSupported()) { | ||||||
|         scheduler.Record([bindings = bindings, |         scheduler.Record([bindings = std::move(bindings), | ||||||
|                           buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { |                           buffer_handles = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { | ||||||
|             cmdbuf.BindVertexBuffers2EXT( |             cmdbuf.BindVertexBuffers2EXT( | ||||||
|                 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(), |                 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(), | ||||||
|                 bindings.offsets.data(), bindings.sizes.data(), bindings.strides.data()); |                 bindings.offsets.data(), bindings.sizes.data(), bindings.strides.data()); | ||||||
|         }); |         }); | ||||||
|     } else { |     } else { | ||||||
|         scheduler.Record([bindings = bindings, |         scheduler.Record([bindings = std::move(bindings), | ||||||
|                           buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { |                           buffer_handles = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { | ||||||
|             cmdbuf.BindVertexBuffers(bindings.min_index, bindings.max_index - bindings.min_index, |             cmdbuf.BindVertexBuffers(bindings.min_index, bindings.max_index - bindings.min_index, | ||||||
|                                      buffer_handles.data(), bindings.offsets.data()); |                                      buffer_handles.data(), bindings.offsets.data()); | ||||||
|         }); |         }); | ||||||
|  | @ -561,12 +561,12 @@ void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings< | ||||||
|     for (u32 index = 0; index < bindings.buffers.size(); ++index) { |     for (u32 index = 0; index < bindings.buffers.size(); ++index) { | ||||||
|         buffer_handles.push_back(bindings.buffers[index]->Handle()); |         buffer_handles.push_back(bindings.buffers[index]->Handle()); | ||||||
|     } |     } | ||||||
|     scheduler.Record( |     scheduler.Record([bindings = std::move(bindings), | ||||||
|         [bindings = bindings, buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { |                       buffer_handles = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { | ||||||
|             cmdbuf.BindTransformFeedbackBuffersEXT(0, static_cast<u32>(buffer_handles.size()), |         cmdbuf.BindTransformFeedbackBuffersEXT(0, static_cast<u32>(buffer_handles.size()), | ||||||
|                                                    buffer_handles.data(), bindings.offsets.data(), |                                                buffer_handles.data(), bindings.offsets.data(), | ||||||
|                                                    bindings.sizes.data()); |                                                bindings.sizes.data()); | ||||||
|         }); |     }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void BufferCacheRuntime::ReserveNullBuffer() { | void BufferCacheRuntime::ReserveNullBuffer() { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 liamwhite
						liamwhite