Skip to content
Snippets Groups Projects
Commit 29dac894 authored by Marek Olšák's avatar Marek Olšák Committed by Dylan Baker
Browse files

gallium/u_threaded: fix buffer busyness tracking

The order of calls was incorrect.

Fixes: e9c41b32 - gallium/u_threaded: add buffer lists - tracking of buffers referenced by tc
Closes: mesa/mesa#5327



Reviewed-By: default avatarMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-By: default avatarJonathan Strobl <jonathan.strobl@gmx.de>
Reviewed-by: default avatarPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <mesa/mesa!16989>
(cherry picked from commit 4c5f7b86)
parent c1f7b8ed
No related branches found
No related tags found
No related merge requests found
......@@ -1696,7 +1696,7 @@
"description": "gallium/u_threaded: fix buffer busyness tracking",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "e9c41b321488c23b7d8ec5744f68218bac753505"
},
......
......@@ -3227,9 +3227,6 @@ tc_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info,
unsigned index_size = info->index_size;
bool has_user_indices = info->has_user_indices;
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
if (unlikely(indirect)) {
assert(!has_user_indices);
assert(num_draws == 1);
......@@ -3263,6 +3260,10 @@ tc_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info,
memcpy(&p->indirect, indirect, sizeof(*indirect));
p->draw.start = draws[0].start;
/* This must be after tc_add_call, which can flush the batch. */
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
return;
}
......@@ -3317,6 +3318,10 @@ tc_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info,
p->info.max_index = draws[0].count;
p->index_bias = draws[0].index_bias;
}
/* This must be after tc_add_call, which can flush the batch. */
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
return;
}
......@@ -3429,6 +3434,10 @@ tc_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info,
total_offset += dr;
}
}
/* This must be after tc_add_*call, which can flush the batch. */
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
}
struct tc_draw_vstate_single {
......@@ -3527,9 +3536,6 @@ tc_draw_vertex_state(struct pipe_context *_pipe,
{
struct threaded_context *tc = threaded_context(_pipe);
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
if (num_draws == 1) {
/* Single draw. */
struct tc_draw_vstate_single *p =
......@@ -3548,6 +3554,11 @@ tc_draw_vertex_state(struct pipe_context *_pipe,
tc_set_vertex_state_reference(&p->state, state);
else
p->state = state;
/* This must be after tc_add_*call, which can flush the batch. */
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
return;
}
......@@ -3589,6 +3600,11 @@ tc_draw_vertex_state(struct pipe_context *_pipe,
total_offset += dr;
}
/* This must be after tc_add_*call, which can flush the batch. */
if (unlikely(tc->add_all_gfx_bindings_to_buffer_list))
tc_add_all_gfx_bindings_to_buffer_list(tc);
}
struct tc_launch_grid_call {
......@@ -3615,14 +3631,15 @@ tc_launch_grid(struct pipe_context *_pipe,
tc_launch_grid_call);
assert(info->input == NULL);
if (unlikely(tc->add_all_compute_bindings_to_buffer_list))
tc_add_all_compute_bindings_to_buffer_list(tc);
tc_set_resource_reference(&p->info.indirect, info->indirect);
memcpy(&p->info, info, sizeof(*info));
if (info->indirect)
tc_add_to_buffer_list(&tc->buffer_lists[tc->next_buf_list], info->indirect);
/* This must be after tc_add_*call, which can flush the batch. */
if (unlikely(tc->add_all_compute_bindings_to_buffer_list))
tc_add_all_compute_bindings_to_buffer_list(tc);
}
static uint16_t
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment