From: Ilia Mirkin Date: Fri, 13 Mar 2015 04:53:49 +0000 (-0400) Subject: freedreno/a3xx: use the same layer size for all slices X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=89b26d5a360ebde11a69f2cdefa66e4d6a2a13fd;p=mesa.git freedreno/a3xx: use the same layer size for all slices We only program in one layer size per texture, so that means that all levels must share one size. This makes the piglit test bin/texelFetch fs sampler2DArray have the same breakage as its non-array version instead of being completely off, and makes bin/ext_texture_array-gen-mipmap start passing. Signed-off-by: Ilia Mirkin Cc: "10.4 10.5" Reviewed-by: Rob Clark --- diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index c412407314f..c7b4e579992 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -215,7 +215,14 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment) slice->pitch = align(width, 32); slice->offset = size; - slice->size0 = align(slice->pitch * height * rsc->cpp, alignment); + /* 1d array, 2d array, 3d textures (but not cube!) must all have the + * same layer size for each miplevel on a3xx. These are also the + * targets that have non-1 alignment. + */ + if (level == 0 || layers_in_level == 1 || alignment == 1) + slice->size0 = align(slice->pitch * height * rsc->cpp, alignment); + else + slice->size0 = rsc->slices[0].size0; size += slice->size0 * depth * layers_in_level;