mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 01:40:14 +01:00
i965: Split merge_inputs and clear_buffers.
The merge_inputs function handles that part that changes when the inputs change. The clear_buffers function triggers when we may need a new upload. Thus the merge_inputs can be limited to be once per brw_draw_prims. v2: Move declaration of attribute index into the for scope. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/308>
This commit is contained in:
parent
de579ffba2
commit
e53fd073be
1 changed files with 23 additions and 10 deletions
|
|
@ -282,21 +282,33 @@ brw_emit_prim(struct brw_context *brw,
|
|||
|
||||
|
||||
static void
|
||||
brw_merge_inputs(struct brw_context *brw)
|
||||
brw_clear_buffers(struct brw_context *brw)
|
||||
{
|
||||
const struct gen_device_info *devinfo = &brw->screen->devinfo;
|
||||
const struct gl_context *ctx = &brw->ctx;
|
||||
GLuint i;
|
||||
|
||||
for (i = 0; i < brw->vb.nr_buffers; i++) {
|
||||
for (unsigned i = 0; i < brw->vb.nr_buffers; ++i) {
|
||||
brw_bo_unreference(brw->vb.buffers[i].bo);
|
||||
brw->vb.buffers[i].bo = NULL;
|
||||
}
|
||||
brw->vb.nr_buffers = 0;
|
||||
|
||||
for (i = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
for (unsigned i = 0; i < brw->vb.nr_enabled; ++i) {
|
||||
brw->vb.enabled[i]->buffer = -1;
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
for (unsigned i = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
assert(brw->vb.inputs[i].buffer == -1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
brw_merge_inputs(struct brw_context *brw)
|
||||
{
|
||||
const struct gen_device_info *devinfo = &brw->screen->devinfo;
|
||||
const struct gl_context *ctx = &brw->ctx;
|
||||
|
||||
for (unsigned i = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
struct brw_vertex_element *input = &brw->vb.inputs[i];
|
||||
input->buffer = -1;
|
||||
_mesa_draw_attrib_and_binding(ctx, i,
|
||||
&input->glattrib, &input->glbinding);
|
||||
}
|
||||
|
|
@ -309,8 +321,8 @@ brw_merge_inputs(struct brw_context *brw)
|
|||
while (mask) {
|
||||
const struct gl_vertex_format *glformat;
|
||||
uint8_t wa_flags = 0;
|
||||
const gl_vert_attrib i = u_bit_scan64(&mask);
|
||||
|
||||
i = u_bit_scan64(&mask);
|
||||
glformat = &brw->vb.inputs[i].glattrib->Format;
|
||||
|
||||
switch (glformat->Type) {
|
||||
|
|
@ -852,6 +864,7 @@ brw_prepare_drawing(struct gl_context *ctx,
|
|||
|
||||
/* Bind all inputs, derive varying and size information:
|
||||
*/
|
||||
brw_clear_buffers(brw);
|
||||
brw_merge_inputs(brw);
|
||||
|
||||
brw->ib.ib = ib;
|
||||
|
|
@ -990,7 +1003,7 @@ brw_draw_single_prim(struct gl_context *ctx,
|
|||
brw->baseinstance = base_instance;
|
||||
if (prim_id > 0) { /* For i == 0 we just did this before the loop */
|
||||
brw->ctx.NewDriverState |= BRW_NEW_VERTICES;
|
||||
brw_merge_inputs(brw);
|
||||
brw_clear_buffers(brw);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue