vk: Drop copy optimization

- The pointer-based nature of write entries, changes invalidate previous data
- Instead of managing scratch, just push to the descriptors built-in management which is quite optimal
This commit is contained in:
kd-11 2025-06-22 03:13:24 +03:00 committed by kd-11
parent b3492b73ad
commit 91491c7cf3
2 changed files with 3 additions and 16 deletions

View file

@ -502,8 +502,6 @@ namespace vk
fmt::throw_exception("Unexpected descriptor structure at index %u", idx); fmt::throw_exception("Unexpected descriptor structure at index %u", idx);
}; };
m_copy_cmds.clear();
rsx::flags32_t type_mask = 0u;
m_descriptor_set = allocate_descriptor_set(); m_descriptor_set = allocate_descriptor_set();
for (unsigned i = 0; i < m_descriptor_slots.size(); ++i) for (unsigned i = 0; i < m_descriptor_slots.size(); ++i)
@ -516,21 +514,11 @@ namespace vk
continue; continue;
} }
m_copy_cmds.push_back({ // We should copy here if possible.
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, // Without descriptor_buffer, the most efficient option is to just use the normal bind logic due to the pointer-based nature of the descriptor inputs and no stride.
.dstSet = m_descriptor_set.value(), push_descriptor_slot(i);
.dstBinding = i,
.descriptorCount = 1,
.descriptorType = m_descriptor_types[i],
.pImageInfo = std::get_if<VkDescriptorImageInfo>(&m_descriptor_slots[i]),
.pBufferInfo = std::get_if<VkDescriptorBufferInfo>(&m_descriptor_slots[i]),
.pTexelBufferView = std::get_if<VkBufferView>(&m_descriptor_slots[i])
});
type_mask |= (1u << m_descriptor_types[i]);
} }
m_descriptor_set.push(m_copy_cmds, type_mask); // Write previous state
m_descriptor_set.on_bind(); m_descriptor_set.on_bind();
m_any_descriptors_dirty = false; m_any_descriptors_dirty = false;

View file

@ -124,7 +124,6 @@ namespace vk
std::vector<descriptor_slot_t> m_descriptor_slots; std::vector<descriptor_slot_t> m_descriptor_slots;
std::vector<bool> m_descriptors_dirty; std::vector<bool> m_descriptors_dirty;
rsx::simple_array<VkWriteDescriptorSet> m_copy_cmds;
bool m_any_descriptors_dirty = false; bool m_any_descriptors_dirty = false;
void init(VkDevice dev); void init(VkDevice dev);