freedreno/query: align counter snapshot locations
authorRob Clark <robclark@freedesktop.org>
Sat, 13 Feb 2016 23:29:28 +0000 (18:29 -0500)
committerRob Clark <robclark@freedesktop.org>
Wed, 17 Feb 2016 15:41:55 +0000 (10:41 -0500)
Some hw queries need their sample memory locations to have certain
alignment.  At the moment that isn't an issue, since the only hw query
is occlusion, so all samples have the same size.  But when others are
added with different sample sizes, this starts to be a problem.

All current and immediately upcoming hw queries simply need their
sample address aligned to their size, so let's use that for now.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/freedreno_query_hw.c

index 7e99c35d132900f3b1daf33f1342ac5d34352aa3..8e421b614baa631f9a7f20068d1398479b6e48ec 100644 (file)
@@ -295,6 +295,8 @@ fd_hw_sample_init(struct fd_context *ctx, uint32_t size)
        struct fd_hw_sample *samp = util_slab_alloc(&ctx->sample_pool);
        pipe_reference_init(&samp->reference, 1);
        samp->size = size;
+       debug_assert(util_is_power_of_two(size));
+       ctx->next_sample_offset = align(ctx->next_sample_offset, size);
        samp->offset = ctx->next_sample_offset;
        /* NOTE: util_slab_alloc() does not zero out the buffer: */
        samp->bo = NULL;