[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