diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 4dd800b941..520e5f7489 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -353,7 +353,7 @@ void BufferCache

::UpdateComputeBuffers() { template void BufferCache

::BindHostGeometryBuffers(bool is_indexed, bool use_dynamic_vertex_input, - vk::CommandBuffer* cmd) { + vk::CommandBufferPtr cmd) { if (is_indexed) { BindHostIndexBuffer(); } else if constexpr (!HAS_FULL_INDEX_AND_PRIMITIVE_SUPPORT) { @@ -765,7 +765,7 @@ void BufferCache

::BindHostIndexBuffer() { } template -void BufferCache

::BindHostVertexBuffers(bool use_dynamic_vertex_input, vk::CommandBuffer* cmd) { +void BufferCache

::BindHostVertexBuffers(bool use_dynamic_vertex_input, vk::CommandBufferPtr cmd) { HostBindings host_bindings; bool any_valid{false}; auto& flags = maxwell3d->dirty.flags; diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h index da5b9f3301..ad966dc5b3 100644 --- a/src/video_core/buffer_cache/buffer_cache_base.h +++ b/src/video_core/buffer_cache/buffer_cache_base.h @@ -39,7 +39,7 @@ namespace VideoCommon { namespace vk { - class CommandBuffer; + using CommandBufferPtr = void*; } using BufferId = Common::SlotId; diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp index e49a9cd00e..e93e5476b4 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp @@ -274,7 +274,7 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bi void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings, bool use_dynamic_vertex_input, - VideoCommon::vk::CommandBuffer* /*cmd*/) { + VideoCommon::vk::CommandBufferPtr /*cmd*/) { // Forward to the existing implementation; OpenGL doesn't use Vulkan command buffers. BindVertexBuffers(bindings, use_dynamic_vertex_input); } diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h index 37ecf2ac0c..a07533a3a3 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.h +++ b/src/video_core/renderer_opengl/gl_buffer_cache.h @@ -107,7 +107,7 @@ public: // Compatibility overload to allow code that provides an optional Vulkan command buffer // pointer to compile for OpenGL. The pointer is ignored for OpenGL runtime. void BindVertexBuffers(VideoCommon::HostBindings& bindings, - bool use_dynamic_vertex_input, VideoCommon::vk::CommandBuffer* cmd); + bool use_dynamic_vertex_input, VideoCommon::vk::CommandBufferPtr cmd); void BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, u32 offset, u32 size); diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 9b6c2ab718..3102e51999 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -552,16 +552,17 @@ void BufferCacheRuntime::BindQuadIndexBuffer(PrimitiveTopology topology, u32 fir } void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride, - bool use_dynamic_vertex_input, vk::CommandBuffer* cmd) { + bool use_dynamic_vertex_input, VideoCommon::vk::CommandBufferPtr cmd) { if (index >= device.GetMaxVertexInputBindings()) { return; } if (use_dynamic_vertex_input && device.IsExtExtendedDynamicStateSupported()) { if (cmd) { + auto cmdbuf = static_cast(cmd); const VkDeviceSize vk_offset = buffer != VK_NULL_HANDLE ? offset : 0; const VkDeviceSize vk_size = buffer != VK_NULL_HANDLE ? size : VK_WHOLE_SIZE; const VkDeviceSize vk_stride = stride; - cmd->BindVertexBuffers2EXT(index, 1, &buffer, &vk_offset, &vk_size, &vk_stride); + cmdbuf->BindVertexBuffers2EXT(index, 1, &buffer, &vk_offset, &vk_size, &vk_stride); } else { scheduler.Record([index, buffer, offset, size, stride](vk::CommandBuffer cmdbuf) { const VkDeviceSize vk_offset = buffer != VK_NULL_HANDLE ? offset : 0; @@ -577,7 +578,8 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset offset = 0; } if (cmd) { - cmd->BindVertexBuffer(index, buffer, offset); + auto cmdbuf = static_cast(cmd); + cmdbuf->BindVertexBuffer(index, buffer, offset); } else { scheduler.Record([index, buffer, offset](vk::CommandBuffer cmdbuf) { cmdbuf.BindVertexBuffer(index, buffer, offset); @@ -587,7 +589,8 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset } void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings, - bool use_dynamic_vertex_input, vk::CommandBuffer* cmd) { + bool use_dynamic_vertex_input, + VideoCommon::vk::CommandBufferPtr cmd) { boost::container::small_vector buffer_handles; for (u32 index = 0; index < bindings.buffers.size(); ++index) { auto handle = bindings.buffers[index]->Handle(); @@ -610,7 +613,8 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bi } if (use_dynamic_vertex_input && device.IsExtExtendedDynamicStateSupported()) { if (cmd) { - cmd->BindVertexBuffers2EXT(bindings.min_index, binding_count, buffer_handles.data(), + auto cmdbuf = static_cast(cmd); + cmdbuf->BindVertexBuffers2EXT(bindings.min_index, binding_count, buffer_handles.data(), bindings.offsets.data(), bindings.sizes.data(), bindings.strides.data()); } else { @@ -624,7 +628,8 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bi } } else { if (cmd) { - cmd->BindVertexBuffers(bindings.min_index, binding_count, buffer_handles.data(), + auto cmdbuf = static_cast(cmd); + cmdbuf->BindVertexBuffers(bindings.min_index, binding_count, buffer_handles.data(), bindings.offsets.data()); } else { scheduler.Record([ diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h index 8bd4493b13..8b44c77c68 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.h +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h @@ -124,10 +124,10 @@ public: void BindQuadIndexBuffer(PrimitiveTopology topology, u32 first, u32 count); void BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride, - bool use_dynamic_vertex_input, vk::CommandBuffer* cmd = nullptr); + bool use_dynamic_vertex_input, VideoCommon::vk::CommandBufferPtr cmd = nullptr); void BindVertexBuffers(VideoCommon::HostBindings& bindings, - bool use_dynamic_vertex_input, vk::CommandBuffer* cmd = nullptr); + bool use_dynamic_vertex_input, VideoCommon::vk::CommandBufferPtr cmd = nullptr); void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size);