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:
Samuel Pitoiset
2017-11-08 12:12:31 +01:00
parent 9444a34f4a
commit f87c58dde3
2 changed files with 21 additions and 0 deletions
+16
View File
@@ -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;
+5
View File
@@ -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;