[Mesa-dev] [PATCH] gallium/radeon: drop support for LINEAR_GENERAL layout

Alex Deucher alexdeucher at gmail.com
Thu Apr 28 16:25:58 UTC 2016


On Thu, Apr 28, 2016 at 8:58 AM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> Unused. All texture imports use LINEAR_ALIGNED regardless of what
> the DDX does.

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/gallium/drivers/r600/evergreen_state.c     | 33 +++++---------------------
>  src/gallium/drivers/r600/r600_state.c          | 33 ++++++--------------------
>  src/gallium/drivers/radeon/radeon_winsys.h     |  1 -
>  src/gallium/drivers/radeonsi/cik_sdma.c        | 12 +++-------
>  src/gallium/drivers/radeonsi/si_dma.c          |  8 +------
>  src/gallium/drivers/radeonsi/si_state.c        | 18 +++-----------
>  src/gallium/winsys/amdgpu/drm/amdgpu_surface.c |  6 -----
>  7 files changed, 20 insertions(+), 91 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index eec567c..5224e42 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -35,13 +35,12 @@
>  static inline unsigned evergreen_array_mode(unsigned mode)
>  {
>         switch (mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:   return V_028C70_ARRAY_LINEAR_ALIGNED;
>                 break;
>         case RADEON_SURF_MODE_1D:               return V_028C70_ARRAY_1D_TILED_THIN1;
>                 break;
>         case RADEON_SURF_MODE_2D:               return V_028C70_ARRAY_2D_TILED_THIN1;
> -       default:
> -       case RADEON_SURF_MODE_LINEAR:           return V_028C70_ARRAY_LINEAR_GENERAL;
>         }
>  }
>
> @@ -758,6 +757,7 @@ evergreen_create_sampler_view_custom(struct pipe_context *ctx,
>         non_disp_tiling = tmp->non_disp_tiling;
>
>         switch (surflevel[base_level].mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
>                 array_mode = V_028C70_ARRAY_LINEAR_ALIGNED;
>                 break;
> @@ -767,10 +767,6 @@ evergreen_create_sampler_view_custom(struct pipe_context *ctx,
>         case RADEON_SURF_MODE_1D:
>                 array_mode = V_028C70_ARRAY_1D_TILED_THIN1;
>                 break;
> -       case RADEON_SURF_MODE_LINEAR:
> -       default:
> -               array_mode = V_028C70_ARRAY_LINEAR_GENERAL;
> -               break;
>         }
>         macro_aspect = tmp->surface.mtilea;
>         bankw = tmp->surface.bankw;
> @@ -1006,14 +1002,8 @@ void evergreen_init_color_surface(struct r600_context *rctx,
>         bool blend_clamp = 0, blend_bypass = 0, do_endian_swap = FALSE;
>
>         offset = rtex->surface.level[level].offset;
> -       if (rtex->surface.level[level].mode == RADEON_SURF_MODE_LINEAR) {
> -               assert(surf->base.u.tex.first_layer == surf->base.u.tex.last_layer);
> -               offset += rtex->surface.level[level].slice_size *
> -                         surf->base.u.tex.first_layer;
> -               color_view = 0;
> -       } else
> -               color_view = S_028C6C_SLICE_START(surf->base.u.tex.first_layer) |
> -                            S_028C6C_SLICE_MAX(surf->base.u.tex.last_layer);
> +       color_view = S_028C6C_SLICE_START(surf->base.u.tex.first_layer) |
> +                    S_028C6C_SLICE_MAX(surf->base.u.tex.last_layer);
>
>         pitch = (rtex->surface.level[level].nblk_x) / 8 - 1;
>         slice = (rtex->surface.level[level].nblk_x * rtex->surface.level[level].nblk_y) / 64;
> @@ -1022,6 +1012,7 @@ void evergreen_init_color_surface(struct r600_context *rctx,
>         }
>         color_info = 0;
>         switch (rtex->surface.level[level].mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
>                 color_info = S_028C70_ARRAY_MODE(V_028C70_ARRAY_LINEAR_ALIGNED);
>                 non_disp_tiling = 1;
> @@ -1034,11 +1025,6 @@ void evergreen_init_color_surface(struct r600_context *rctx,
>                 color_info = S_028C70_ARRAY_MODE(V_028C70_ARRAY_2D_TILED_THIN1);
>                 non_disp_tiling = rtex->non_disp_tiling;
>                 break;
> -       case RADEON_SURF_MODE_LINEAR:
> -       default:
> -               color_info = S_028C70_ARRAY_MODE(V_028C70_ARRAY_LINEAR_GENERAL);
> -               non_disp_tiling = 1;
> -               break;
>         }
>         tile_split = rtex->surface.tile_split;
>         macro_aspect = rtex->surface.mtilea;
> @@ -1201,7 +1187,6 @@ static void evergreen_init_depth_surface(struct r600_context *rctx,
>                 break;
>         case RADEON_SURF_MODE_1D:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
> -       case RADEON_SURF_MODE_LINEAR:
>         default:
>                 array_mode = V_028C70_ARRAY_1D_TILED_THIN1;
>                 break;
> @@ -3391,9 +3376,6 @@ static void evergreen_dma_copy_tile(struct r600_context *rctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>         assert(dst_mode != src_mode);
>
>         /* non_disp_tiling bit needs to be set for depth, stencil, and fmask surfaces */
> @@ -3406,7 +3388,7 @@ static void evergreen_dma_copy_tile(struct r600_context *rctx,
>         pitch_tile_max = ((pitch / bpp) / 8) - 1;
>         nbanks = eg_num_banks(rctx->screen->b.info.r600_num_banks);
>
> -       if (dst_mode == RADEON_SURF_MODE_LINEAR) {
> +       if (dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED) {
>                 /* T2L */
>                 array_mode = evergreen_array_mode(src_mode);
>                 slice_tile_max = (rsrc->surface.level[src_level].nblk_x * rsrc->surface.level[src_level].nblk_y) / (8*8);
> @@ -3538,9 +3520,6 @@ static void evergreen_dma_copy(struct pipe_context *ctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>
>         if (src_pitch != dst_pitch || src_box->x || dst_x || src_w != dst_w) {
>                 /* FIXME evergreen can do partial blit */
> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
> index 75a4363..2291096 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -717,7 +717,9 @@ r600_create_sampler_view_custom(struct pipe_context *ctx,
>                 depth = texture->array_size;
>         } else if (texture->target == PIPE_TEXTURE_CUBE_ARRAY)
>                 depth = texture->array_size / 6;
> +
>         switch (tmp->surface.level[offset_level].mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
>                 array_mode = V_038000_ARRAY_LINEAR_ALIGNED;
>                 break;
> @@ -727,10 +729,6 @@ r600_create_sampler_view_custom(struct pipe_context *ctx,
>         case RADEON_SURF_MODE_2D:
>                 array_mode = V_038000_ARRAY_2D_TILED_THIN1;
>                 break;
> -       case RADEON_SURF_MODE_LINEAR:
> -       default:
> -               array_mode = V_038000_ARRAY_LINEAR_GENERAL;
> -               break;
>         }
>
>         if (state->format == PIPE_FORMAT_X24S8_UINT ||
> @@ -838,14 +836,8 @@ static void r600_init_color_surface(struct r600_context *rctx,
>         }
>
>         offset = rtex->surface.level[level].offset;
> -       if (rtex->surface.level[level].mode == RADEON_SURF_MODE_LINEAR) {
> -               assert(surf->base.u.tex.first_layer == surf->base.u.tex.last_layer);
> -               offset += rtex->surface.level[level].slice_size *
> -                       surf->base.u.tex.first_layer;
> -               color_view = 0;
> -       } else
> -               color_view = S_028080_SLICE_START(surf->base.u.tex.first_layer) |
> -                            S_028080_SLICE_MAX(surf->base.u.tex.last_layer);
> +       color_view = S_028080_SLICE_START(surf->base.u.tex.first_layer) |
> +                    S_028080_SLICE_MAX(surf->base.u.tex.last_layer);
>
>         pitch = rtex->surface.level[level].nblk_x / 8 - 1;
>         slice = (rtex->surface.level[level].nblk_x * rtex->surface.level[level].nblk_y) / 64;
> @@ -854,6 +846,7 @@ static void r600_init_color_surface(struct r600_context *rctx,
>         }
>         color_info = 0;
>         switch (rtex->surface.level[level].mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
>                 color_info = S_0280A0_ARRAY_MODE(V_038000_ARRAY_LINEAR_ALIGNED);
>                 break;
> @@ -863,10 +856,6 @@ static void r600_init_color_surface(struct r600_context *rctx,
>         case RADEON_SURF_MODE_2D:
>                 color_info = S_0280A0_ARRAY_MODE(V_038000_ARRAY_2D_TILED_THIN1);
>                 break;
> -       case RADEON_SURF_MODE_LINEAR:
> -       default:
> -               color_info = S_0280A0_ARRAY_MODE(V_038000_ARRAY_LINEAR_GENERAL);
> -               break;
>         }
>
>         desc = util_format_description(surf->base.format);
> @@ -1055,7 +1044,6 @@ static void r600_init_depth_surface(struct r600_context *rctx,
>                 break;
>         case RADEON_SURF_MODE_1D:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
> -       case RADEON_SURF_MODE_LINEAR:
>         default:
>                 array_mode = V_0280A0_ARRAY_1D_TILED_THIN1;
>                 break;
> @@ -2842,13 +2830,12 @@ void r600_update_db_shader_control(struct r600_context * rctx)
>  static inline unsigned r600_array_mode(unsigned mode)
>  {
>         switch (mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:   return V_0280A0_ARRAY_LINEAR_ALIGNED;
>                 break;
>         case RADEON_SURF_MODE_1D:               return V_0280A0_ARRAY_1D_TILED_THIN1;
>                 break;
>         case RADEON_SURF_MODE_2D:               return V_0280A0_ARRAY_2D_TILED_THIN1;
> -       default:
> -       case RADEON_SURF_MODE_LINEAR:           return V_0280A0_ARRAY_LINEAR_GENERAL;
>         }
>  }
>
> @@ -2876,16 +2863,13 @@ static boolean r600_dma_copy_tile(struct r600_context *rctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>         assert(dst_mode != src_mode);
>
>         y = 0;
>         lbpp = util_logbase2(bpp);
>         pitch_tile_max = ((pitch / bpp) / 8) - 1;
>
> -       if (dst_mode == RADEON_SURF_MODE_LINEAR) {
> +       if (dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED) {
>                 /* T2L */
>                 array_mode = r600_array_mode(src_mode);
>                 slice_tile_max = (rsrc->surface.level[src_level].nblk_x * rsrc->surface.level[src_level].nblk_y) / (8*8);
> @@ -3006,9 +2990,6 @@ static void r600_dma_copy(struct pipe_context *ctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>
>         if (src_pitch != dst_pitch || src_box->x || dst_x || src_w != dst_w) {
>                 /* strict requirement on r6xx/r7xx */
> diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
> index 0df6734..1612c13 100644
> --- a/src/gallium/drivers/radeon/radeon_winsys.h
> +++ b/src/gallium/drivers/radeon/radeon_winsys.h
> @@ -326,7 +326,6 @@ enum radeon_feature_id {
>  #define     RADEON_SURF_TYPE_2D_ARRAY               5
>  #define RADEON_SURF_MODE_MASK                   0xFF
>  #define RADEON_SURF_MODE_SHIFT                  8
> -#define     RADEON_SURF_MODE_LINEAR                 0
>  #define     RADEON_SURF_MODE_LINEAR_ALIGNED         1
>  #define     RADEON_SURF_MODE_1D                     2
>  #define     RADEON_SURF_MODE_2D                     3
> diff --git a/src/gallium/drivers/radeonsi/cik_sdma.c b/src/gallium/drivers/radeonsi/cik_sdma.c
> index 6eb62dc..07a7d94 100644
> --- a/src/gallium/drivers/radeonsi/cik_sdma.c
> +++ b/src/gallium/drivers/radeonsi/cik_sdma.c
> @@ -126,17 +126,14 @@ static void cik_sdma_copy_tile(struct si_context *ctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>         assert(dst_mode != src_mode);
> -       assert(src_mode == RADEON_SURF_MODE_LINEAR || dst_mode == RADEON_SURF_MODE_LINEAR);
> +       assert(src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED || dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED);
>
>         sub_op = CIK_SDMA_COPY_SUB_OPCODE_TILED;
>         lbpe = util_logbase2(bpe);
>         pitch_tile_max = ((pitch / bpe) / 8) - 1;
>
> -       detile = dst_mode == RADEON_SURF_MODE_LINEAR;
> +       detile = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED;
>         rlinear = detile ? rdst : rsrc;
>         rtiled = detile ? rsrc : rdst;
>         linear_lvl = detile ? dst_level : src_level;
> @@ -276,12 +273,9 @@ void cik_sdma_copy(struct pipe_context *ctx,
>         copy_height = src_box->height / rsrc->surface.blk_h;
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>
>         /* Dimensions must be aligned to (macro)tiles */
> -       switch (src_mode == RADEON_SURF_MODE_LINEAR ? dst_mode : src_mode) {
> +       switch (src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? dst_mode : src_mode) {
>         case RADEON_SURF_MODE_1D:
>                 if ((src_x % 8) || (src_y % 8) || (dst_x % 8) || (dst_y % 8) ||
>                     (copy_height % 8))
> diff --git a/src/gallium/drivers/radeonsi/si_dma.c b/src/gallium/drivers/radeonsi/si_dma.c
> index 0efca19..688edbe 100644
> --- a/src/gallium/drivers/radeonsi/si_dma.c
> +++ b/src/gallium/drivers/radeonsi/si_dma.c
> @@ -126,16 +126,13 @@ static void si_dma_copy_tile(struct si_context *ctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>         assert(dst_mode != src_mode);
>
>         sub_cmd = SI_DMA_COPY_TILED;
>         lbpp = util_logbase2(bpp);
>         pitch_tile_max = ((pitch / bpp) / 8) - 1;
>
> -       detile = dst_mode == RADEON_SURF_MODE_LINEAR;
> +       detile = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED;
>         rlinear = detile ? rdst : rsrc;
>         rtiled = detile ? rsrc : rdst;
>         linear_lvl = detile ? dst_level : src_level;
> @@ -270,9 +267,6 @@ void si_dma_copy(struct pipe_context *ctx,
>
>         dst_mode = rdst->surface.level[dst_level].mode;
>         src_mode = rsrc->surface.level[src_level].mode;
> -       /* downcast linear aligned to linear to simplify test */
> -       src_mode = src_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : src_mode;
> -       dst_mode = dst_mode == RADEON_SURF_MODE_LINEAR_ALIGNED ? RADEON_SURF_MODE_LINEAR : dst_mode;
>
>         if (src_pitch != dst_pitch || src_box->x || dst_x || src_w != dst_w ||
>             src_box->width != src_w ||
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index c214932..1dd468b 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -58,15 +58,13 @@ void si_init_atom(struct si_context *sctx, struct r600_atom *atom,
>  unsigned si_array_mode(unsigned mode)
>  {
>         switch (mode) {
> +       default:
>         case RADEON_SURF_MODE_LINEAR_ALIGNED:
>                 return V_009910_ARRAY_LINEAR_ALIGNED;
>         case RADEON_SURF_MODE_1D:
>                 return V_009910_ARRAY_1D_TILED_THIN1;
>         case RADEON_SURF_MODE_2D:
>                 return V_009910_ARRAY_2D_TILED_THIN1;
> -       default:
> -       case RADEON_SURF_MODE_LINEAR:
> -               return V_009910_ARRAY_LINEAR_GENERAL;
>         }
>  }
>
> @@ -2119,17 +2117,8 @@ static void si_initialize_color_surface(struct si_context *sctx,
>         int i;
>         unsigned blend_clamp = 0, blend_bypass = 0;
>
> -       /* Layered rendering doesn't work with LINEAR_GENERAL.
> -        * (LINEAR_ALIGNED and others work) */
> -       if (rtex->surface.level[level].mode == RADEON_SURF_MODE_LINEAR) {
> -               assert(surf->base.u.tex.first_layer == surf->base.u.tex.last_layer);
> -               offset += rtex->surface.level[level].slice_size *
> -                         surf->base.u.tex.first_layer;
> -               color_view = 0;
> -       } else {
> -               color_view = S_028C6C_SLICE_START(surf->base.u.tex.first_layer) |
> -                            S_028C6C_SLICE_MAX(surf->base.u.tex.last_layer);
> -       }
> +       color_view = S_028C6C_SLICE_START(surf->base.u.tex.first_layer) |
> +                    S_028C6C_SLICE_MAX(surf->base.u.tex.last_layer);
>
>         pitch = (rtex->surface.level[level].nblk_x) / 8 - 1;
>         slice = (rtex->surface.level[level].nblk_x * rtex->surface.level[level].nblk_y) / 64;
> @@ -2346,7 +2335,6 @@ static void si_init_depth_surface(struct si_context *sctx,
>                         break;
>                 case RADEON_SURF_MODE_1D:
>                 case RADEON_SURF_MODE_LINEAR_ALIGNED:
> -               case RADEON_SURF_MODE_LINEAR:
>                 default:
>                         array_mode = V_02803C_ARRAY_1D_TILED_THIN1;
>                         break;
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
> index 1164a30..5ee6be4 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c
> @@ -226,9 +226,6 @@ static int compute_level(struct amdgpu_winsys *ws,
>        surf_level->nblk_z = 1;
>
>     switch (AddrSurfInfoOut->tileMode) {
> -   case ADDR_TM_LINEAR_GENERAL:
> -      surf_level->mode = RADEON_SURF_MODE_LINEAR;
> -      break;
>     case ADDR_TM_LINEAR_ALIGNED:
>        surf_level->mode = RADEON_SURF_MODE_LINEAR_ALIGNED;
>        break;
> @@ -316,9 +313,6 @@ static int amdgpu_surface_init(struct radeon_winsys *rws,
>
>     /* Set the requested tiling mode. */
>     switch (mode) {
> -   case RADEON_SURF_MODE_LINEAR:
> -      AddrSurfInfoIn.tileMode = ADDR_TM_LINEAR_GENERAL;
> -      break;
>     case RADEON_SURF_MODE_LINEAR_ALIGNED:
>        AddrSurfInfoIn.tileMode = ADDR_TM_LINEAR_ALIGNED;
>        break;
> --
> 2.5.0
>
> _______________________________________________
> 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