mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 22:20:14 +01:00
radv: add a mask of bound descriptor buffers for dynamic vertex input
unnecessarily dereferencing the vertex buffer info array here causes a ton of cpu overhead due to bad cache locality, so just use a mask to avoid loading X more cachelines into memory unnecessarily Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13320>
This commit is contained in:
parent
eda5634e25
commit
1b8bdecf6e
2 changed files with 10 additions and 6 deletions
|
|
@ -4446,7 +4446,9 @@ radv_CmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer, uint32_t firstBindi
|
|||
const uint32_t bit = 1u << idx;
|
||||
if (!buffer) {
|
||||
cmd_buffer->state.vbo_misaligned_mask &= ~bit;
|
||||
cmd_buffer->state.vbo_bound_mask &= ~bit;
|
||||
} else {
|
||||
cmd_buffer->state.vbo_bound_mask |= bit;
|
||||
if (pStrides && vb[idx].stride != stride) {
|
||||
if (stride & state->format_align_req_minus_1[idx])
|
||||
cmd_buffer->state.vbo_misaligned_mask |= bit;
|
||||
|
|
@ -5483,15 +5485,16 @@ radv_CmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingD
|
|||
|
||||
if (chip == GFX6 || chip >= GFX10) {
|
||||
struct radv_vertex_binding *vb = cmd_buffer->vertex_bindings;
|
||||
unsigned bit = 1u << loc;
|
||||
if (binding->stride & format_align_req_minus_1) {
|
||||
state->misaligned_mask |= 1u << loc;
|
||||
if (vb[attrib->binding].buffer)
|
||||
cmd_buffer->state.vbo_misaligned_mask |= 1u << loc;
|
||||
state->misaligned_mask |= bit;
|
||||
if (cmd_buffer->state.vbo_bound_mask & bit)
|
||||
cmd_buffer->state.vbo_misaligned_mask |= bit;
|
||||
} else {
|
||||
state->possibly_misaligned_mask |= 1u << loc;
|
||||
if (vb[attrib->binding].buffer &&
|
||||
state->possibly_misaligned_mask |= bit;
|
||||
if (cmd_buffer->state.vbo_bound_mask & bit &&
|
||||
((vb[attrib->binding].offset + state->offsets[loc]) & format_align_req_minus_1))
|
||||
cmd_buffer->state.vbo_misaligned_mask |= 1u << loc;
|
||||
cmd_buffer->state.vbo_misaligned_mask |= bit;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1432,6 +1432,7 @@ struct radv_cmd_state {
|
|||
uint32_t *emitted_vs_prolog_key;
|
||||
uint32_t emitted_vs_prolog_key_hash;
|
||||
uint32_t vbo_misaligned_mask;
|
||||
uint32_t vbo_bound_mask;
|
||||
};
|
||||
|
||||
struct radv_cmd_pool {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue