Its uses of OUT_BATCH will need a local variable defined by BEGIN_BATCH. Increases .text size by 8 bytes. --- src/mesa/drivers/dri/i965/brw_draw_upload.c | 79 +++++++++++++---------------- 1 file changed, 36 insertions(+), 43 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c index 320e40e..0536ac3 100644 --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c @@ -604,46 +604,40 @@ brw_prepare_shader_draw_parameters(struct brw_context *brw) /** * Emit a VERTEX_BUFFER_STATE entry (part of 3DSTATE_VERTEX_BUFFERS). */ -static void -emit_vertex_buffer_state(struct brw_context *brw, - unsigned buffer_nr, - drm_intel_bo *bo, - unsigned bo_ending_address, - unsigned bo_offset, - unsigned stride, - unsigned step_rate) -{ - struct gl_context *ctx = &brw->ctx; - uint32_t dw0; - - if (brw->gen >= 6) { - dw0 = (buffer_nr << GEN6_VB0_INDEX_SHIFT) | - (step_rate ? GEN6_VB0_ACCESS_INSTANCEDATA - : GEN6_VB0_ACCESS_VERTEXDATA); - } else { - dw0 = (buffer_nr << BRW_VB0_INDEX_SHIFT) | - (step_rate ? BRW_VB0_ACCESS_INSTANCEDATA - : BRW_VB0_ACCESS_VERTEXDATA); - } - - if (brw->gen >= 7) - dw0 |= GEN7_VB0_ADDRESS_MODIFYENABLE; - - if (brw->gen == 7) - dw0 |= GEN7_MOCS_L3 << 16; - - WARN_ONCE(stride >= (brw->gen >= 5 ? 2048 : 2047), - "VBO stride %d too large, bad rendering may occur\n", - stride); - OUT_BATCH(dw0 | (stride << BRW_VB0_PITCH_SHIFT)); - OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0, bo_offset); - if (brw->gen >= 5) { - OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0, bo_ending_address); - } else { - OUT_BATCH(0); - } - OUT_BATCH(step_rate); -} +#define EMIT_VERTEX_BUFFER_STATE(buffer_nr, bo, bo_ending_address, \ + bo_offset,stride, step_rate) \ +do { \ + struct gl_context *ctx = &brw->ctx; \ + uint32_t dw0; \ + \ + if (brw->gen >= 6) { \ + dw0 = (buffer_nr << GEN6_VB0_INDEX_SHIFT) | \ + (step_rate ? GEN6_VB0_ACCESS_INSTANCEDATA \ + : GEN6_VB0_ACCESS_VERTEXDATA); \ + } else { \ + dw0 = (buffer_nr << BRW_VB0_INDEX_SHIFT) | \ + (step_rate ? BRW_VB0_ACCESS_INSTANCEDATA \ + : BRW_VB0_ACCESS_VERTEXDATA); \ + } \ + \ + if (brw->gen >= 7) \ + dw0 |= GEN7_VB0_ADDRESS_MODIFYENABLE; \ + \ + if (brw->gen == 7) \ + dw0 |= GEN7_MOCS_L3 << 16; \ + \ + WARN_ONCE(stride >= (brw->gen >= 5 ? 2048 : 2047), \ + "VBO stride %d too large, bad rendering may occur\n", \ + stride); \ + OUT_BATCH(dw0 | (stride << BRW_VB0_PITCH_SHIFT)); \ + OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0, bo_offset); \ + if (brw->gen >= 5) { \ + OUT_RELOC(bo, I915_GEM_DOMAIN_VERTEX, 0, bo_ending_address); \ + } else { \ + OUT_BATCH(0); \ + } \ + OUT_BATCH(step_rate); \ +} while (0) static void brw_emit_vertices(struct brw_context *brw) { @@ -704,14 +698,13 @@ static void brw_emit_vertices(struct brw_context *brw) OUT_BATCH((_3DSTATE_VERTEX_BUFFERS << 16) | (4 * nr_buffers - 1)); for (i = 0; i < brw->vb.nr_buffers; i++) { struct brw_vertex_buffer *buffer = &brw->vb.buffers[i]; - emit_vertex_buffer_state(brw, i, buffer->bo, buffer->bo->size - 1, + EMIT_VERTEX_BUFFER_STATE(i, buffer->bo, buffer->bo->size - 1, buffer->offset, buffer->stride, buffer->step_rate); - } if (brw->vs.prog_data->uses_vertexid) { - emit_vertex_buffer_state(brw, brw->vb.nr_buffers, + EMIT_VERTEX_BUFFER_STATE(brw->vb.nr_buffers, brw->draw.draw_params_bo, brw->draw.draw_params_bo->size - 1, brw->draw.draw_params_offset, -- 2.3.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev