[Mesa-dev] [PATCH] radv/winsys: only workout color/depth levels if we have color/depth
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Mon Apr 3 17:55:51 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
On Mon, Apr 3, 2017 at 7:17 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This fixes an old bug that seems to get triggered by
> dEQP-VK.memory.requirements.image.sparse_tiling_optimal
>
> We return early when allocating S8_UINT due to there being
> no color or depth, and end up with image size of 0.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c | 48 ++++++++++++----------
> 1 file changed, 26 insertions(+), 22 deletions(-)
>
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> index 0433952..53ca6ff 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> @@ -481,28 +481,32 @@ static int radv_amdgpu_winsys_surface_init(struct radeon_winsys *_ws,
> surf->htile_size = surf->htile_slice_size = 0;
> surf->htile_alignment = 1;
>
> - /* Calculate texture layout information. */
> - for (level = 0; level <= surf->last_level; level++) {
> - r = radv_compute_level(ws->addrlib, surf, false, level, type, compressed,
> - &AddrSurfInfoIn, &AddrSurfInfoOut, &AddrDccIn, &AddrDccOut);
> - if (r)
> - return r;
> -
> - if (level == 0) {
> - surf->bo_alignment = AddrSurfInfoOut.baseAlign;
> - surf->pipe_config = AddrSurfInfoOut.pTileInfo->pipeConfig - 1;
> - radv_set_micro_tile_mode(surf, &ws->info);
> -
> - /* For 2D modes only. */
> - if (AddrSurfInfoOut.tileMode >= ADDR_TM_2D_TILED_THIN1) {
> - surf->bankw = AddrSurfInfoOut.pTileInfo->bankWidth;
> - surf->bankh = AddrSurfInfoOut.pTileInfo->bankHeight;
> - surf->mtilea = AddrSurfInfoOut.pTileInfo->macroAspectRatio;
> - surf->tile_split = AddrSurfInfoOut.pTileInfo->tileSplitBytes;
> - surf->num_banks = AddrSurfInfoOut.pTileInfo->banks;
> - surf->macro_tile_index = AddrSurfInfoOut.macroModeIndex;
> - } else {
> - surf->macro_tile_index = 0;
> + if (AddrSurfInfoIn.flags.color || AddrSurfInfoIn.flags.depth) {
> + /* Calculate texture layout information. */
> + for (level = 0; level <= surf->last_level; level++) {
> + r = radv_compute_level(ws->addrlib, surf, false, level, type, compressed,
> + &AddrSurfInfoIn, &AddrSurfInfoOut, &AddrDccIn, &AddrDccOut);
> + if (r) {
> + assert(0);
> + return r;
> + }
> +
> + if (level == 0) {
> + surf->bo_alignment = AddrSurfInfoOut.baseAlign;
> + surf->pipe_config = AddrSurfInfoOut.pTileInfo->pipeConfig - 1;
> + radv_set_micro_tile_mode(surf, &ws->info);
> +
> + /* For 2D modes only. */
> + if (AddrSurfInfoOut.tileMode >= ADDR_TM_2D_TILED_THIN1) {
> + surf->bankw = AddrSurfInfoOut.pTileInfo->bankWidth;
> + surf->bankh = AddrSurfInfoOut.pTileInfo->bankHeight;
> + surf->mtilea = AddrSurfInfoOut.pTileInfo->macroAspectRatio;
> + surf->tile_split = AddrSurfInfoOut.pTileInfo->tileSplitBytes;
> + surf->num_banks = AddrSurfInfoOut.pTileInfo->banks;
> + surf->macro_tile_index = AddrSurfInfoOut.macroModeIndex;
> + } else {
> + surf->macro_tile_index = 0;
> + }
> }
> }
> }
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list