radv: prefetch VBO descriptors at the right place
Just after the vertex shader. This seems to give a minor boost for, at least, Serious Sam Fusion 2017 and Dawn of War 3. I don't see any real impacts with The Talos Principle. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -668,6 +668,17 @@ radv_emit_prefetch_TC_L2_async(struct radv_cmd_buffer *cmd_buffer, uint64_t va,
|
||||
si_cp_dma_prefetch(cmd_buffer, va, size);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_emit_VBO_descriptors_prefetch(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
if (cmd_buffer->state.vb_prefetch_dirty) {
|
||||
radv_emit_prefetch_TC_L2_async(cmd_buffer,
|
||||
cmd_buffer->state.vb_va,
|
||||
cmd_buffer->state.vb_size);
|
||||
cmd_buffer->state.vb_prefetch_dirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
radv_emit_shader_prefetch(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_shader_variant *shader)
|
||||
@@ -691,6 +702,7 @@ radv_emit_prefetch(struct radv_cmd_buffer *cmd_buffer,
|
||||
{
|
||||
radv_emit_shader_prefetch(cmd_buffer,
|
||||
pipeline->shaders[MESA_SHADER_VERTEX]);
|
||||
radv_emit_VBO_descriptors_prefetch(cmd_buffer);
|
||||
radv_emit_shader_prefetch(cmd_buffer,
|
||||
pipeline->shaders[MESA_SHADER_TESS_CTRL]);
|
||||
radv_emit_shader_prefetch(cmd_buffer,
|
||||
@@ -1814,6 +1826,10 @@ radv_cmd_buffer_update_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, bo
|
||||
|
||||
radv_emit_userdata_address(cmd_buffer, cmd_buffer->state.pipeline, MESA_SHADER_VERTEX,
|
||||
AC_UD_VS_VERTEX_BUFFERS, va);
|
||||
|
||||
cmd_buffer->state.vb_va = va;
|
||||
cmd_buffer->state.vb_size = count * 16;
|
||||
cmd_buffer->state.vb_prefetch_dirty = true;
|
||||
}
|
||||
cmd_buffer->state.vb_dirty = false;
|
||||
|
||||
|
||||
@@ -809,7 +809,12 @@ struct radv_attachment_state {
|
||||
};
|
||||
|
||||
struct radv_cmd_state {
|
||||
/* Vertex descriptors */
|
||||
bool vb_dirty;
|
||||
bool vb_prefetch_dirty;
|
||||
uint64_t vb_va;
|
||||
unsigned vb_size;
|
||||
|
||||
bool push_descriptors_dirty;
|
||||
bool predicating;
|
||||
radv_cmd_dirty_mask_t dirty;
|
||||
|
||||
Reference in New Issue
Block a user