[Intel-gfx] [PATCH] drm/i915: Tidy workaround batch buffer emission
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Feb 8 14:44:04 UTC 2017
On 08/02/2017 13:20, Chris Wilson wrote:
> On Wed, Feb 08, 2017 at 01:13:48PM +0000, Tvrtko Ursulin wrote:
>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> -static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
>> - struct i915_wa_ctx_bb *wa_ctx,
>> - uint32_t *batch,
>> - uint32_t *offset)
>> +static u32 *gen9_init_perctx_bb(struct intel_engine_cs *engine, u32 *batch)
>> {
>> - uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
>> -
>> - wa_ctx_emit(batch, index, MI_BATCH_BUFFER_END);
>> + *batch++ = MI_BATCH_BUFFER_END;
>>
>> - return wa_ctx_end(wa_ctx, *offset = index, 1);
>> + return batch;
>> }
>
> Transformation looks reasonable, but I'd like to omit this per-ctx bb
> when empty.
Don't know if that is possible. It is always programming the offset at
the moment so documentation digging is required.
>> + /*
>> + * Emit the two workaround batch buffers, recording the offset from the
>> + * start of the workaround batch buffer object for each and their
>> + * respective sizes.
>> + */
>> + for (i = 0; i < ARRAY_SIZE(wa_bb_f); i++) {
>> + wa_bb[i]->offset = ALIGN(batch_ptr - batch, CACHELINE_DWORDS);
>> + batch_ptr = wa_bb_f[i](engine, batch_ptr);
>> + wa_bb[i]->size = batch_ptr - &batch[wa_bb[i]->offset];
>
> Which will break this pattern. At the least we could do
>
> if (!ww_bb_fn[i])
> continue;
>
> And then skip loading into the context image if size==0.
>
> I'll double check the mechanical aspects in a bit.
This should have been an RFC, just a mistake on my part for not marking
it as such. It saves around 500-600 bytes AFAIR, but also I was thinking
of adding a helper to emit the often used pipe control
(gen8_emit_flush_render) which can bring more gains.
Regards,
Tvrtko
More information about the Intel-gfx
mailing list