mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-28 05:46:56 +01:00
renderer: remove duplicate vertex and index buffer rebind
This commit is contained in:
@@ -664,12 +664,10 @@ struct DrawIndexBufferSource {
|
|||||||
|
|
||||||
struct PreparedIndexBuffer {
|
struct PreparedIndexBuffer {
|
||||||
std::shared_ptr<void> owner;
|
std::shared_ptr<void> owner;
|
||||||
vk::Buffer buffer = nullptr;
|
vk::Buffer buffer = nullptr;
|
||||||
uint64_t address = 0;
|
uint64_t size = 0;
|
||||||
uint64_t size = 0;
|
vk::DeviceSize offset = 0;
|
||||||
vk::DeviceSize offset = 0;
|
vk::IndexType type = vk::IndexType::eUint16;
|
||||||
vk::IndexType type = vk::IndexType::eUint16;
|
|
||||||
bool streamed = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint64_t VertexBufferDescriptorSize(const ShaderVertexInputBuffer& buffer) {
|
static uint64_t VertexBufferDescriptorSize(const ShaderVertexInputBuffer& buffer) {
|
||||||
@@ -896,12 +894,6 @@ static std::vector<BufferBinding> PrepareVertexBuffers(uint64_t
|
|||||||
return AcquireVertexBuffers(buffer, vs_input_info);
|
return AcquireVertexBuffers(buffer, vs_input_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RebindVertexBuffers(RenderCommandBuffer& buffer,
|
|
||||||
const ShaderVertexInputInfo& vs_input_info,
|
|
||||||
std::vector<BufferBinding>& bindings) {
|
|
||||||
bindings = AcquireVertexBuffers(buffer, vs_input_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
static PreparedIndexBuffer PrepareIndexBuffer(RenderCommandBuffer& buffer,
|
static PreparedIndexBuffer PrepareIndexBuffer(RenderCommandBuffer& buffer,
|
||||||
const DrawIndexBufferSource& source) {
|
const DrawIndexBufferSource& source) {
|
||||||
PreparedIndexBuffer prepared;
|
PreparedIndexBuffer prepared;
|
||||||
@@ -909,16 +901,14 @@ static PreparedIndexBuffer PrepareIndexBuffer(RenderCommandBuffer& buffe
|
|||||||
return prepared;
|
return prepared;
|
||||||
}
|
}
|
||||||
EXIT_IF(source.size == 0);
|
EXIT_IF(source.size == 0);
|
||||||
prepared.address = source.address;
|
prepared.size = source.size;
|
||||||
prepared.size = source.size;
|
prepared.type = source.type;
|
||||||
prepared.type = source.type;
|
|
||||||
if (source.host_data != nullptr) {
|
if (source.host_data != nullptr) {
|
||||||
auto binding =
|
auto binding =
|
||||||
buffer.GetContext().GetBufferCache().UploadTransient(source.host_data, source.size, 16);
|
buffer.GetContext().GetBufferCache().UploadTransient(source.host_data, source.size, 16);
|
||||||
prepared.owner = std::move(binding.owner);
|
prepared.owner = std::move(binding.owner);
|
||||||
prepared.buffer = binding.buffer;
|
prepared.buffer = binding.buffer;
|
||||||
prepared.offset = binding.offset;
|
prepared.offset = binding.offset;
|
||||||
prepared.streamed = true;
|
|
||||||
} else {
|
} else {
|
||||||
auto binding =
|
auto binding =
|
||||||
buffer.GetContext().GetBufferCache().ObtainBuffer(buffer, source.address, source.size);
|
buffer.GetContext().GetBufferCache().ObtainBuffer(buffer, source.address, source.size);
|
||||||
@@ -929,17 +919,6 @@ static PreparedIndexBuffer PrepareIndexBuffer(RenderCommandBuffer& buffe
|
|||||||
return prepared;
|
return prepared;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RebindIndexBuffer(RenderCommandBuffer& buffer, PreparedIndexBuffer& prepared) {
|
|
||||||
if (prepared.size == 0 || prepared.streamed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto binding =
|
|
||||||
buffer.GetContext().GetBufferCache().ObtainBuffer(buffer, prepared.address, prepared.size);
|
|
||||||
prepared.owner = std::move(binding.owner);
|
|
||||||
prepared.buffer = binding.buffer;
|
|
||||||
prepared.offset = binding.offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CommitVertexBuffers(RenderCommandBuffer& buffer, vk::CommandBuffer vk_buffer,
|
static void CommitVertexBuffers(RenderCommandBuffer& buffer, vk::CommandBuffer vk_buffer,
|
||||||
std::vector<BufferBinding>& bindings) {
|
std::vector<BufferBinding>& bindings) {
|
||||||
for (uint32_t slot = 0; slot < bindings.size(); slot++) {
|
for (uint32_t slot = 0; slot < bindings.size(); slot++) {
|
||||||
@@ -1046,8 +1025,6 @@ void RenderExecutor::ExecutePreparedDraw(uint64_t submit_id, RenderCommandBuffer
|
|||||||
state.ps_input_info.stage, state.ps_active);
|
state.ps_input_info.stage, state.ps_active);
|
||||||
auto vertex_bindings = PrepareVertexBuffers(submit_id, buffer, draw, state.vs_input_info);
|
auto vertex_bindings = PrepareVertexBuffers(submit_id, buffer, draw, state.vs_input_info);
|
||||||
auto index_binding = PrepareIndexBuffer(buffer, index_source);
|
auto index_binding = PrepareIndexBuffer(buffer, index_source);
|
||||||
RebindVertexBuffers(buffer, state.vs_input_info, vertex_bindings);
|
|
||||||
RebindIndexBuffer(buffer, index_binding);
|
|
||||||
state.rendering =
|
state.rendering =
|
||||||
AcquireRenderTargets(buffer, state.color_info, state.color_count, state.depth_info);
|
AcquireRenderTargets(buffer, state.color_info, state.color_count, state.depth_info);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user