From a691fa4a1be3730f0cfc9566944bd23adb03966d Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 27 Mar 2018 16:29:10 -0700 Subject: [PATCH] broadcom/vc5: Fix padding of NPOT miplevels >= 2. The power-of-two padded size that gets minified is based on level 1's dimensions, not level 0's, which starts to differ at a width of 9. Fixes all failures on texelFetch fs sampler2D 1x1x1-64x64x1 --- src/gallium/drivers/vc5/vc5_resource.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/vc5/vc5_resource.c b/src/gallium/drivers/vc5/vc5_resource.c index 1f0ddb1a295..321a14b9046 100644 --- a/src/gallium/drivers/vc5/vc5_resource.c +++ b/src/gallium/drivers/vc5/vc5_resource.c @@ -390,9 +390,14 @@ vc5_setup_slices(struct vc5_resource *rsc) uint32_t width = prsc->width0; uint32_t height = prsc->height0; uint32_t depth = prsc->depth0; - uint32_t pot_width = util_next_power_of_two(width); - uint32_t pot_height = util_next_power_of_two(height); - uint32_t pot_depth = util_next_power_of_two(depth); + /* Note that power-of-two padding is based on level 1. These are not + * equivalent to just util_next_power_of_two(dimension), because at a + * level 0 dimension of 9, the level 1 power-of-two padded value is 4, + * not 8. + */ + uint32_t pot_width = 2 * util_next_power_of_two(u_minify(width, 1)); + uint32_t pot_height = 2 * util_next_power_of_two(u_minify(height, 1)); + uint32_t pot_depth = 2 * util_next_power_of_two(u_minify(depth, 1)); uint32_t offset = 0; uint32_t utile_w = vc5_utile_width(rsc->cpp); uint32_t utile_h = vc5_utile_height(rsc->cpp); -- 2.30.2