anv/tests: Fix block_pool_no_free test.
authorRafael Antognolli <rafael.antognolli@intel.com>
Thu, 29 Nov 2018 00:36:41 +0000 (16:36 -0800)
committerRafael Antognolli <rafael.antognolli@intel.com>
Thu, 17 Jan 2019 23:05:58 +0000 (15:05 -0800)
commit27478ce00e3619e2d3e6809a6e953295e8d651de
tree064b6436a95ee41543416a0ba7fcc2bb37252acf
parent4149d41f2e4ea02ca86975d25ab160e69bf0f8e5
anv/tests: Fix block_pool_no_free test.

There were 2 problems with this test.

First it was comparing highest, which was -1, with an uint32_t. So the
current value would never be higher than that, and the assert would
always be false. It just never reached this point because of the next
problem.

It was always looking for the highest value of each thread and storing
it in thread_max. So a test case like this wouldn't work:

[Thread]: [Blocks]
   [0]: [0, 32, 64, 96]
   [1]: [128, 160, 192, 224]
   [2]: [256, 288, 320, 352]

Not only that would skip values and iterate only over thread number 2,
instead of walking through all of them, but thread_max was also
initialized to -1. And then compared to unsigned blocks[i][next[i].

We fix that by getting the smallest value of each thread, and checking
if it is lower than thread_min, which is initialized to INT32_MAX. And
then we end up walking through all the blocks of all threads. We also
change "blocks" to be int32_t instead of uint32_t, since in some places
(alloc_blocks) it was already referenced as int32_t, and that fixes the
comparison to -1.

v2:
 - keep highest initialized to -1, and change blocks to be int32_t.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/tests/block_pool_no_free.c