|
|
@ -598,17 +598,6 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset |
|
|
if (index >= device.GetMaxVertexInputBindings()) { |
|
|
if (index >= device.GetMaxVertexInputBindings()) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
const bool use_dynamic_vertex_input_binding_stride = |
|
|
|
|
|
device.IsExtExtendedDynamicStateSupported() && |
|
|
|
|
|
use_vertex_input_binding_stride_dynamic_state; |
|
|
|
|
|
if (use_dynamic_vertex_input_binding_stride) { |
|
|
|
|
|
scheduler.Record([index, buffer, offset, size, stride](vk::CommandBuffer cmdbuf) { |
|
|
|
|
|
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; |
|
|
|
|
|
cmdbuf.BindVertexBuffers2EXT(index, 1, &buffer, &vk_offset, &vk_size, &vk_stride); |
|
|
|
|
|
}); |
|
|
|
|
|
} else { |
|
|
|
|
|
if (!device.HasNullDescriptor() && buffer == VK_NULL_HANDLE) { |
|
|
if (!device.HasNullDescriptor() && buffer == VK_NULL_HANDLE) { |
|
|
ReserveNullBuffer(); |
|
|
ReserveNullBuffer(); |
|
|
buffer = *null_buffer; |
|
|
buffer = *null_buffer; |
|
|
@ -617,7 +606,6 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset |
|
|
scheduler.Record([index, buffer, offset](vk::CommandBuffer cmdbuf) { |
|
|
scheduler.Record([index, buffer, offset](vk::CommandBuffer cmdbuf) { |
|
|
cmdbuf.BindVertexBuffer(index, buffer, offset); |
|
|
cmdbuf.BindVertexBuffer(index, buffer, offset); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings) { |
|
|
void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bindings) { |
|
|
@ -641,25 +629,12 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bi |
|
|
if (binding_count == 0) { |
|
|
if (binding_count == 0) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
const bool use_dynamic_vertex_input_binding_stride = |
|
|
|
|
|
device.IsExtExtendedDynamicStateSupported() && |
|
|
|
|
|
use_vertex_input_binding_stride_dynamic_state; |
|
|
|
|
|
if (use_dynamic_vertex_input_binding_stride) { |
|
|
|
|
|
scheduler.Record([bindings_ = std::move(bindings), |
|
|
|
|
|
buffer_handles_ = std::move(buffer_handles), |
|
|
|
|
|
binding_count](vk::CommandBuffer cmdbuf) { |
|
|
|
|
|
cmdbuf.BindVertexBuffers2EXT(bindings_.min_index, binding_count, buffer_handles_.data(), |
|
|
|
|
|
bindings_.offsets.data(), bindings_.sizes.data(), |
|
|
|
|
|
bindings_.strides.data()); |
|
|
|
|
|
}); |
|
|
|
|
|
} else { |
|
|
|
|
|
scheduler.Record([bindings_ = std::move(bindings), |
|
|
scheduler.Record([bindings_ = std::move(bindings), |
|
|
buffer_handles_ = std::move(buffer_handles), |
|
|
buffer_handles_ = std::move(buffer_handles), |
|
|
binding_count](vk::CommandBuffer cmdbuf) { |
|
|
binding_count](vk::CommandBuffer cmdbuf) { |
|
|
cmdbuf.BindVertexBuffers(bindings_.min_index, binding_count, buffer_handles_.data(), |
|
|
cmdbuf.BindVertexBuffers(bindings_.min_index, binding_count, buffer_handles_.data(), |
|
|
bindings_.offsets.data()); |
|
|
bindings_.offsets.data()); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, |
|
|
void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, |
|
|
|