On Tuesday, November 28, 2017 4:13:21 PM PST Kenneth Graunke wrote:
> Uncommenting these blocks stress tests the batch/state growth code by
> trying to "grow" a buffer to the same size at least once per batch.
> 
> When anything goes wrong with this code, dumping the validation list
> is a useful way to figure out what's happening.
> ---
>  src/mesa/drivers/dri/i965/intel_batchbuffer.c | 27 
> +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
> b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> index 12d165d7236..b5b9468ed65 100644
> --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> @@ -64,6 +64,21 @@
>  static void
>  intel_batchbuffer_reset(struct brw_context *brw);
>  
> +UNUSED static void
> +dump_validation_list(struct intel_batchbuffer *batch)
> +{
> +   fprintf(stderr, "Validation list (length %d):\n", batch->exec_count);
> +
> +   for (int i = 0; i < batch->exec_count; i++) {
> +      assert(batch->validation_list[i].handle ==
> +             batch->exec_bos[i]->gem_handle);
> +      fprintf(stderr, "[%d] = %d %s %p\n", i,
> +              batch->validation_list[i].handle,
> +              batch->exec_bos[i]->name,
> +              batch->exec_bos[i]);
> +   }
> +}
> +
>  static bool
>  uint_key_compare(const void *a, const void *b)
>  {
> @@ -996,6 +1011,18 @@ _intel_batchbuffer_flush_fence(struct brw_context *brw,
>     brw_finish_batch(brw);
>     intel_upload_finish(brw);
>  
> +   /* Test batch/state growing by swapping a BO for one of the same size */
> +   if (0) {
> +      const unsigned used = 4 * USED_BATCH(brw->batch);
> +      grow_buffer(brw, &brw->batch.batch, used, brw->batch.batch.bo->size);
> +      brw->batch.map_next = (void *) brw->batch.batch.map + used;
> +   }
> +   if (0) {

I've updated this locally to:

+   if (0 && brw->batch.state.bo->index != -1) {

because the buffer growing code assumes the BO is actually in the
validation list.  It normally is, unless you don't emit any state
at all, say for really simple batches.

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to