summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Morph2023-06-13 00:32:16 -0400
committerGravatar Morph2023-06-13 00:59:42 -0400
commit925586f97bb4a2f13b602d145cdd3aa00c7177fa (patch)
treea7bb918bf3dd173a571cb65ed3783c7d45d4be68 /src
parentMerge pull request #10746 from bunnei/update-android-settings (diff)
downloadyuzu-925586f97bb4a2f13b602d145cdd3aa00c7177fa.tar.gz
yuzu-925586f97bb4a2f13b602d145cdd3aa00c7177fa.tar.xz
yuzu-925586f97bb4a2f13b602d145cdd3aa00c7177fa.zip
buffer_cache_base: Specify buffer type in HostBindings
Avoid reinterpret-casting from void pointer since the type is already known at compile time.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h8
-rw-r--r--src/video_core/buffer_cache/buffer_cache_base.h3
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp19
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp30
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h6
6 files changed, 35 insertions, 37 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 251a4a880..9bafd8cc0 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -715,7 +715,7 @@ void BufferCache<P>::BindHostIndexBuffer() {
715 715
716template <class P> 716template <class P>
717void BufferCache<P>::BindHostVertexBuffers() { 717void BufferCache<P>::BindHostVertexBuffers() {
718 HostBindings host_bindings; 718 HostBindings<typename P::Buffer> host_bindings;
719 bool any_valid{false}; 719 bool any_valid{false};
720 auto& flags = maxwell3d->dirty.flags; 720 auto& flags = maxwell3d->dirty.flags;
721 for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) { 721 for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) {
@@ -741,7 +741,7 @@ void BufferCache<P>::BindHostVertexBuffers() {
741 const u32 stride = maxwell3d->regs.vertex_streams[index].stride; 741 const u32 stride = maxwell3d->regs.vertex_streams[index].stride;
742 const u32 offset = buffer.Offset(binding.cpu_addr); 742 const u32 offset = buffer.Offset(binding.cpu_addr);
743 743
744 host_bindings.buffers.push_back(reinterpret_cast<void*>(&buffer)); 744 host_bindings.buffers.push_back(&buffer);
745 host_bindings.offsets.push_back(offset); 745 host_bindings.offsets.push_back(offset);
746 host_bindings.sizes.push_back(binding.size); 746 host_bindings.sizes.push_back(binding.size);
747 host_bindings.strides.push_back(stride); 747 host_bindings.strides.push_back(stride);
@@ -900,7 +900,7 @@ void BufferCache<P>::BindHostTransformFeedbackBuffers() {
900 if (maxwell3d->regs.transform_feedback_enabled == 0) { 900 if (maxwell3d->regs.transform_feedback_enabled == 0) {
901 return; 901 return;
902 } 902 }
903 HostBindings host_bindings; 903 HostBindings<typename P::Buffer> host_bindings;
904 for (u32 index = 0; index < NUM_TRANSFORM_FEEDBACK_BUFFERS; ++index) { 904 for (u32 index = 0; index < NUM_TRANSFORM_FEEDBACK_BUFFERS; ++index) {
905 const Binding& binding = channel_state->transform_feedback_buffers[index]; 905 const Binding& binding = channel_state->transform_feedback_buffers[index];
906 if (maxwell3d->regs.transform_feedback.controls[index].varying_count == 0 && 906 if (maxwell3d->regs.transform_feedback.controls[index].varying_count == 0 &&
@@ -913,7 +913,7 @@ void BufferCache<P>::BindHostTransformFeedbackBuffers() {
913 SynchronizeBuffer(buffer, binding.cpu_addr, size); 913 SynchronizeBuffer(buffer, binding.cpu_addr, size);
914 914
915 const u32 offset = buffer.Offset(binding.cpu_addr); 915 const u32 offset = buffer.Offset(binding.cpu_addr);
916 host_bindings.buffers.push_back(reinterpret_cast<void*>(&buffer)); 916 host_bindings.buffers.push_back(&buffer);
917 host_bindings.offsets.push_back(offset); 917 host_bindings.offsets.push_back(offset);
918 host_bindings.sizes.push_back(binding.size); 918 host_bindings.sizes.push_back(binding.size);
919 } 919 }
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h
index cf359e241..63a120f7a 100644
--- a/src/video_core/buffer_cache/buffer_cache_base.h
+++ b/src/video_core/buffer_cache/buffer_cache_base.h
@@ -105,8 +105,9 @@ static constexpr Binding NULL_BINDING{
105 .buffer_id = NULL_BUFFER_ID, 105 .buffer_id = NULL_BUFFER_ID,
106}; 106};
107 107
108template <typename Buffer>
108struct HostBindings { 109struct HostBindings {
109 boost::container::small_vector<void*, NUM_VERTEX_BUFFERS> buffers; 110 boost::container::small_vector<Buffer*, NUM_VERTEX_BUFFERS> buffers;
110 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> offsets; 111 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> offsets;
111 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> sizes; 112 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> sizes;
112 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> strides; 113 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> strides;
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 0cc546a3a..38d553d3c 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -232,12 +232,12 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, Buffer& buffer, u32 offset,
232 } 232 }
233} 233}
234 234
235void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings) { 235void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings) {
236 for (u32 index = 0; index < bindings.buffers.size(); index++) { 236 for (u32 index = 0; index < bindings.buffers.size(); ++index) {
237 BindVertexBuffer( 237 BindVertexBuffer(bindings.min_index + index, *bindings.buffers[index],
238 bindings.min_index + index, *reinterpret_cast<Buffer*>(bindings.buffers[index]), 238 static_cast<u32>(bindings.offsets[index]),
239 static_cast<u32>(bindings.offsets[index]), static_cast<u32>(bindings.sizes[index]), 239 static_cast<u32>(bindings.sizes[index]),
240 static_cast<u32>(bindings.strides[index])); 240 static_cast<u32>(bindings.strides[index]));
241 } 241 }
242} 242}
243 243
@@ -329,10 +329,9 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, Buffer& buffer,
329 static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size)); 329 static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size));
330} 330}
331 331
332void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings) { 332void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings<Buffer>& bindings) {
333 for (u32 index = 0; index < bindings.buffers.size(); index++) { 333 for (u32 index = 0; index < bindings.buffers.size(); ++index) {
334 glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, index, 334 glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, index, bindings.buffers[index]->Handle(),
335 reinterpret_cast<Buffer*>(bindings.buffers[index])->Handle(),
336 static_cast<GLintptr>(bindings.offsets[index]), 335 static_cast<GLintptr>(bindings.offsets[index]),
337 static_cast<GLsizeiptr>(bindings.sizes[index])); 336 static_cast<GLsizeiptr>(bindings.sizes[index]));
338 } 337 }
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index e4e000284..41b746f3b 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -87,7 +87,8 @@ public:
87 void BindIndexBuffer(Buffer& buffer, u32 offset, u32 size); 87 void BindIndexBuffer(Buffer& buffer, u32 offset, u32 size);
88 88
89 void BindVertexBuffer(u32 index, Buffer& buffer, u32 offset, u32 size, u32 stride); 89 void BindVertexBuffer(u32 index, Buffer& buffer, u32 offset, u32 size, u32 stride);
90 void BindVertexBuffers(VideoCommon::HostBindings& bindings); 90
91 void BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings);
91 92
92 void BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, u32 offset, u32 size); 93 void BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, u32 offset, u32 size);
93 94
@@ -100,7 +101,8 @@ public:
100 bool is_written); 101 bool is_written);
101 102
102 void BindTransformFeedbackBuffer(u32 index, Buffer& buffer, u32 offset, u32 size); 103 void BindTransformFeedbackBuffer(u32 index, Buffer& buffer, u32 offset, u32 size);
103 void BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings); 104
105 void BindTransformFeedbackBuffers(VideoCommon::HostBindings<Buffer>& bindings);
104 106
105 void BindTextureBuffer(Buffer& buffer, u32 offset, u32 size, 107 void BindTextureBuffer(Buffer& buffer, u32 offset, u32 size,
106 VideoCore::Surface::PixelFormat format); 108 VideoCore::Surface::PixelFormat format);
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index d72d99899..8c33722d3 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -501,11 +501,10 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset
501 } 501 }
502} 502}
503 503
504void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings) { 504void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings) {
505 boost::container::small_vector<VkBuffer, 32> buffer_handles; 505 boost::container::small_vector<VkBuffer, 32> buffer_handles;
506 for (u32 index = 0; index < bindings.buffers.size(); index++) { 506 for (u32 index = 0; index < bindings.buffers.size(); ++index) {
507 auto& buffer = *reinterpret_cast<Buffer*>(bindings.buffers[index]); 507 auto handle = bindings.buffers[index]->Handle();
508 auto handle = buffer.Handle();
509 if (handle == VK_NULL_HANDLE) { 508 if (handle == VK_NULL_HANDLE) {
510 bindings.offsets[index] = 0; 509 bindings.offsets[index] = 0;
511 bindings.sizes[index] = VK_WHOLE_SIZE; 510 bindings.sizes[index] = VK_WHOLE_SIZE;
@@ -521,16 +520,13 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings)
521 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { 520 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
522 cmdbuf.BindVertexBuffers2EXT( 521 cmdbuf.BindVertexBuffers2EXT(
523 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(), 522 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(),
524 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()), 523 bindings.offsets.data(), bindings.sizes.data(), bindings.strides.data());
525 reinterpret_cast<const VkDeviceSize*>(bindings.sizes.data()),
526 reinterpret_cast<const VkDeviceSize*>(bindings.strides.data()));
527 }); 524 });
528 } else { 525 } else {
529 scheduler.Record([bindings = bindings, 526 scheduler.Record([bindings = bindings,
530 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { 527 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
531 cmdbuf.BindVertexBuffers( 528 cmdbuf.BindVertexBuffers(bindings.min_index, bindings.max_index - bindings.min_index,
532 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(), 529 buffer_handles.data(), bindings.offsets.data());
533 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()));
534 }); 530 });
535 } 531 }
536} 532}
@@ -556,22 +552,20 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer,
556 }); 552 });
557} 553}
558 554
559void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings) { 555void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings<Buffer>& bindings) {
560 if (!device.IsExtTransformFeedbackSupported()) { 556 if (!device.IsExtTransformFeedbackSupported()) {
561 // Already logged in the rasterizer 557 // Already logged in the rasterizer
562 return; 558 return;
563 } 559 }
564 boost::container::small_vector<VkBuffer, 4> buffer_handles; 560 boost::container::small_vector<VkBuffer, 4> buffer_handles;
565 for (u32 index = 0; index < bindings.buffers.size(); index++) { 561 for (u32 index = 0; index < bindings.buffers.size(); ++index) {
566 auto& buffer = *reinterpret_cast<Buffer*>(bindings.buffers[index]); 562 buffer_handles.push_back(bindings.buffers[index]->Handle());
567 buffer_handles.push_back(buffer.Handle());
568 } 563 }
569 scheduler.Record( 564 scheduler.Record(
570 [bindings = bindings, buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) { 565 [bindings = bindings, buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
571 cmdbuf.BindTransformFeedbackBuffersEXT( 566 cmdbuf.BindTransformFeedbackBuffersEXT(0, static_cast<u32>(buffer_handles.size()),
572 0, static_cast<u32>(buffer_handles.size()), buffer_handles.data(), 567 buffer_handles.data(), bindings.offsets.data(),
573 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()), 568 bindings.sizes.data());
574 reinterpret_cast<const VkDeviceSize*>(bindings.sizes.data()));
575 }); 569 });
576} 570}
577 571
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 92d3e9f32..cdeef8846 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -97,10 +97,12 @@ public:
97 void BindQuadIndexBuffer(PrimitiveTopology topology, u32 first, u32 count); 97 void BindQuadIndexBuffer(PrimitiveTopology topology, u32 first, u32 count);
98 98
99 void BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride); 99 void BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride);
100 void BindVertexBuffers(VideoCommon::HostBindings& bindings); 100
101 void BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings);
101 102
102 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size); 103 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size);
103 void BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings); 104
105 void BindTransformFeedbackBuffers(VideoCommon::HostBindings<Buffer>& bindings);
104 106
105 std::span<u8> BindMappedUniformBuffer([[maybe_unused]] size_t stage, 107 std::span<u8> BindMappedUniformBuffer([[maybe_unused]] size_t stage,
106 [[maybe_unused]] u32 binding_index, u32 size) { 108 [[maybe_unused]] u32 binding_index, u32 size) {