[Mesa-dev] [PATCH 2/2] i965: Delete tile resource mode code
Jason Ekstrand
jason at jlekstrand.net
Tue Mar 21 22:21:28 UTC 2017
Both are
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
On Tue, Mar 21, 2017 at 2:57 PM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
> Yf/Ys tiling never got used in i965 due to not delivering
> the expected performance benefits. So, this patch is deleting
> this dead code in favor of adding it later in ISL when we
> actually find it useful. ISL can then share this code between
> vulkan and GL.
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/brw_defines.h | 9 --
> src/mesa/drivers/dri/i965/brw_misc_state.c | 3 +-
> src/mesa/drivers/dri/i965/brw_tex_layout.c | 130
> -----------------------
> src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 143
> ++++++--------------------
> src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 17 +--
> 5 files changed, 35 insertions(+), 267 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h
> b/src/mesa/drivers/dri/i965/brw_defines.h
> index efed5a6..08106c0 100644
> --- a/src/mesa/drivers/dri/i965/brw_defines.h
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> @@ -354,12 +354,6 @@
> #define GEN7_SURFACE_MOCS_SHIFT 16
> #define GEN7_SURFACE_MOCS_MASK INTEL_MASK(19, 16)
>
> -#define GEN9_SURFACE_TRMODE_SHIFT 18
> -#define GEN9_SURFACE_TRMODE_MASK INTEL_MASK(19, 18)
> -#define GEN9_SURFACE_TRMODE_NONE 0
> -#define GEN9_SURFACE_TRMODE_TILEYF 1
> -#define GEN9_SURFACE_TRMODE_TILEYS 2
> -
> #define GEN9_SURFACE_MIP_TAIL_START_LOD_SHIFT 8
> #define GEN9_SURFACE_MIP_TAIL_START_LOD_MASK INTEL_MASK(11, 8)
>
> @@ -1620,9 +1614,6 @@ enum brw_pixel_shader_coverage_mask_mode {
> #define BR13_16161616 (0x4 << 24)
> #define BR13_32323232 (0x5 << 24)
>
> -#define XY_FAST_SRC_TRMODE_YF (1 << 31)
> -#define XY_FAST_DST_TRMODE_YF (1 << 30)
> -
> /* Pipeline Statistics Counter Registers */
> #define IA_VERTICES_COUNT 0x2310
> #define IA_PRIMITIVES_COUNT 0x2318
> diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c
> b/src/mesa/drivers/dri/i965/brw_misc_state.c
> index 1cf6b04..83c1810 100644
> --- a/src/mesa/drivers/dri/i965/brw_misc_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
> @@ -177,7 +177,7 @@ brw_get_depthstencil_tile_masks(struct
> intel_mipmap_tree *depth_mt,
> uint32_t tile_mask_x = 0, tile_mask_y = 0;
>
> if (depth_mt) {
> - intel_get_tile_masks(depth_mt->tiling, depth_mt->tr_mode,
> + intel_get_tile_masks(depth_mt->tiling,
> depth_mt->cpp,
> &tile_mask_x, &tile_mask_y);
> assert(!intel_miptree_level_has_hiz(depth_mt, depth_level));
> @@ -194,7 +194,6 @@ brw_get_depthstencil_tile_masks(struct
> intel_mipmap_tree *depth_mt,
> } else {
> uint32_t stencil_tile_mask_x, stencil_tile_mask_y;
> intel_get_tile_masks(stencil_mt->tiling,
> - stencil_mt->tr_mode,
> stencil_mt->cpp,
> &stencil_tile_mask_x,
> &stencil_tile_mask_y);
> diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c
> b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> index 8a528e0..bfa8afa 100644
> --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c
> +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c
> @@ -40,74 +40,6 @@
> #define FILE_DEBUG_FLAG DEBUG_MIPTREE
>
> static unsigned int
> -tr_mode_horizontal_texture_alignment(const struct intel_mipmap_tree *mt)
> -{
> - unsigned ret_align, divisor, multiplier_ys;
> -
> - /* Values in below tables specifiy the horizontal alignment requirement
> - * in elements for TRMODE_YF surface. An element is defined as a pixel
> in
> - * uncompressed surface formats, and as a compression block in
> compressed
> - * surface formats. For MSFMT_DEPTH_STENCIL type multisampled
> surfaces, an
> - * element is a sample.
> - */
> - const unsigned align_1d_yf[] = {4096, 2048, 1024, 512, 256};
> - const unsigned align_2d_yf[] = {64, 64, 32, 32, 16};
> - const unsigned align_3d_yf[] = {16, 8, 8, 8, 4};
> -
> - assert(mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE);
> -
> - /* Alignment computations below assume a power of 2 cpp. */
> - assert (mt->cpp >= 1 && mt->cpp <= 16 && _mesa_is_pow_two(mt->cpp));
> - /* Compute array index. */
> - const int i = ffs(mt->cpp) - 1;
> -
> - switch(mt->target) {
> - case GL_TEXTURE_1D:
> - case GL_TEXTURE_1D_ARRAY:
> - ret_align = align_1d_yf[i];
> - multiplier_ys = 16;
> - break;
> - case GL_TEXTURE_2D:
> - case GL_TEXTURE_RECTANGLE:
> - case GL_TEXTURE_2D_ARRAY:
> - case GL_TEXTURE_CUBE_MAP:
> - case GL_TEXTURE_CUBE_MAP_ARRAY:
> - case GL_TEXTURE_2D_MULTISAMPLE:
> - case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
> - ret_align = align_2d_yf[i];
> - multiplier_ys = 4;
> - break;
> - case GL_TEXTURE_3D:
> - ret_align = align_3d_yf[i];
> - multiplier_ys = 4;
> - break;
> - default:
> - unreachable("not reached");
> - }
> -
> - if (mt->tr_mode == INTEL_MIPTREE_TRMODE_YS)
> - ret_align *= multiplier_ys;
> -
> - assert(_mesa_is_pow_two(mt->num_samples));
> -
> - switch (mt->num_samples) {
> - case 2:
> - case 4:
> - divisor = 2;
> - break;
> - case 8:
> - case 16:
> - divisor = 4;
> - break;
> - default:
> - divisor = 1;
> - break;
> - }
> - return ret_align / divisor;
> -}
> -
> -
> -static unsigned int
> intel_horizontal_texture_alignment_unit(struct brw_context *brw,
> struct intel_mipmap_tree *mt,
> uint32_t layout_flags)
> @@ -141,63 +73,6 @@ intel_horizontal_texture_alignment_unit(struct
> brw_context *brw,
> }
>
> static unsigned int
> -tr_mode_vertical_texture_alignment(const struct intel_mipmap_tree *mt)
> -{
> - unsigned ret_align, divisor, multiplier_ys;
> -
> - /* Vertical alignment tables for TRMODE_YF */
> - const unsigned align_2d_yf[] = {64, 32, 32, 16, 16};
> - const unsigned align_3d_yf[] = {16, 16, 16, 8, 8};
> -
> - assert(mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE);
> -
> - /* Alignment computations below assume a power of 2 cpp. */
> - assert (mt->cpp >= 1 && mt->cpp <= 16 && _mesa_is_pow_two(mt->cpp)) ;
> - /* Compute array index. */
> - const int i = ffs(mt->cpp) - 1;
> -
> - switch(mt->target) {
> - case GL_TEXTURE_2D:
> - case GL_TEXTURE_RECTANGLE:
> - case GL_TEXTURE_2D_ARRAY:
> - case GL_TEXTURE_CUBE_MAP:
> - case GL_TEXTURE_CUBE_MAP_ARRAY:
> - case GL_TEXTURE_2D_MULTISAMPLE:
> - case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
> - ret_align = align_2d_yf[i];
> - multiplier_ys = 4;
> - break;
> - case GL_TEXTURE_3D:
> - ret_align = align_3d_yf[i];
> - multiplier_ys = 2;
> - break;
> - case GL_TEXTURE_1D:
> - case GL_TEXTURE_1D_ARRAY:
> - default:
> - unreachable("Unexpected miptree target");
> - }
> -
> - if (mt->tr_mode == INTEL_MIPTREE_TRMODE_YS)
> - ret_align *= multiplier_ys;
> -
> - assert(_mesa_is_pow_two(mt->num_samples));
> -
> - switch (mt->num_samples) {
> - case 4:
> - case 8:
> - divisor = 2;
> - break;
> - case 16:
> - divisor = 4;
> - break;
> - default:
> - divisor = 1;
> - break;
> - }
> - return ret_align / divisor;
> -}
> -
> -static unsigned int
> intel_vertical_texture_alignment_unit(struct brw_context *brw,
> const struct intel_mipmap_tree *mt)
> {
> @@ -753,9 +628,6 @@ intel_miptree_set_alignment(struct brw_context *brw,
> } else if (mt->format == MESA_FORMAT_S_UINT8) {
> mt->halign = 8;
> mt->valign = brw->gen >= 7 ? 8 : 4;
> - } else if (brw->gen >= 9 && mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE) {
> - mt->halign = tr_mode_horizontal_texture_alignment(mt);
> - mt->valign = tr_mode_vertical_texture_alignment(mt);
> } else {
> mt->halign =
> intel_horizontal_texture_alignment_unit(brw, mt, layout_flags);
> @@ -768,8 +640,6 @@ brw_miptree_layout(struct brw_context *brw,
> struct intel_mipmap_tree *mt,
> uint32_t layout_flags)
> {
> - mt->tr_mode = INTEL_MIPTREE_TRMODE_NONE;
> -
> intel_miptree_set_alignment(brw, mt, layout_flags);
> intel_miptree_set_total_width_height(brw, mt);
>
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index 3295175..467ada5 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -576,34 +576,6 @@ intel_lower_compressed_format(struct brw_context
> *brw, mesa_format format)
> }
> }
>
> -/* This function computes Yf/Ys tiled bo size, alignment and pitch. */
> -static unsigned long
> -intel_get_yf_ys_bo_size(struct intel_mipmap_tree *mt, unsigned
> *alignment,
> - unsigned long *pitch)
> -{
> - uint32_t tile_width, tile_height;
> - unsigned long stride, size, aligned_y;
> -
> - assert(mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE);
> - intel_get_tile_dims(mt->tiling, mt->tr_mode, mt->cpp,
> - &tile_width, &tile_height);
> -
> - aligned_y = ALIGN(mt->total_height, tile_height);
> - stride = mt->total_width * mt->cpp;
> - stride = ALIGN(stride, tile_width);
> - size = stride * aligned_y;
> -
> - if (mt->tr_mode == INTEL_MIPTREE_TRMODE_YF) {
> - assert(size % 4096 == 0);
> - *alignment = 4096;
> - } else {
> - assert(size % (64 * 1024) == 0);
> - *alignment = 64 * 1024;
> - }
> - *pitch = stride;
> - return size;
> -}
> -
> static struct intel_mipmap_tree *
> miptree_create(struct brw_context *brw,
> GLenum target,
> @@ -642,27 +614,18 @@ miptree_create(struct brw_context *brw,
> unsigned long pitch;
> mt->etc_format = etc_format;
>
> - if (mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE) {
> - unsigned alignment = 0;
> - unsigned long size;
> - size = intel_get_yf_ys_bo_size(mt, &alignment, &pitch);
> - assert(size);
> - mt->bo = drm_intel_bo_alloc_for_render(brw->bufmgr, "miptree",
> - size, alignment);
> + if (format == MESA_FORMAT_S_UINT8) {
> + /* Align to size of W tile, 64x64. */
> + mt->bo = drm_intel_bo_alloc_tiled(brw->bufmgr, "miptree",
> + ALIGN(mt->total_width, 64),
> + ALIGN(mt->total_height, 64),
> + mt->cpp, &mt->tiling, &pitch,
> + alloc_flags);
> } else {
> - if (format == MESA_FORMAT_S_UINT8) {
> - /* Align to size of W tile, 64x64. */
> - mt->bo = drm_intel_bo_alloc_tiled(brw->bufmgr, "miptree",
> - ALIGN(mt->total_width, 64),
> - ALIGN(mt->total_height, 64),
> - mt->cpp, &mt->tiling, &pitch,
> - alloc_flags);
> - } else {
> - mt->bo = drm_intel_bo_alloc_tiled(brw->bufmgr, "miptree",
> - mt->total_width,
> mt->total_height,
> - mt->cpp, &mt->tiling, &pitch,
> - alloc_flags);
> - }
> + mt->bo = drm_intel_bo_alloc_tiled(brw->bufmgr, "miptree",
> + mt->total_width, mt->total_height,
> + mt->cpp, &mt->tiling, &pitch,
> + alloc_flags);
> }
>
> mt->pitch = pitch;
> @@ -1148,53 +1111,24 @@ intel_miptree_get_image_offset(const struct
> intel_mipmap_tree *mt,
> * and tile_h is set to 1.
> */
> void
> -intel_get_tile_dims(uint32_t tiling, uint32_t tr_mode, uint32_t cpp,
> +intel_get_tile_dims(uint32_t tiling, uint32_t cpp,
> uint32_t *tile_w, uint32_t *tile_h)
> {
> - if (tr_mode == INTEL_MIPTREE_TRMODE_NONE) {
> - switch (tiling) {
> - case I915_TILING_X:
> - *tile_w = 512;
> - *tile_h = 8;
> - break;
> - case I915_TILING_Y:
> - *tile_w = 128;
> - *tile_h = 32;
> - break;
> - case I915_TILING_NONE:
> - *tile_w = cpp;
> - *tile_h = 1;
> - break;
> - default:
> - unreachable("not reached");
> - }
> - } else {
> - uint32_t aspect_ratio = 1;
> - assert(_mesa_is_pow_two(cpp));
> -
> - switch (cpp) {
> - case 1:
> - *tile_h = 64;
> - break;
> - case 2:
> - case 4:
> - *tile_h = 32;
> - break;
> - case 8:
> - case 16:
> - *tile_h = 16;
> - break;
> - default:
> - unreachable("not reached");
> - }
> -
> - if (cpp == 2 || cpp == 8)
> - aspect_ratio = 2;
> -
> - if (tr_mode == INTEL_MIPTREE_TRMODE_YS)
> - *tile_h *= 4;
> -
> - *tile_w = *tile_h * aspect_ratio * cpp;
> + switch (tiling) {
> + case I915_TILING_X:
> + *tile_w = 512;
> + *tile_h = 8;
> + break;
> + case I915_TILING_Y:
> + *tile_w = 128;
> + *tile_h = 32;
> + break;
> + case I915_TILING_NONE:
> + *tile_w = cpp;
> + *tile_h = 1;
> + break;
> + default:
> + unreachable("not reached");
> }
> }
>
> @@ -1205,12 +1139,12 @@ intel_get_tile_dims(uint32_t tiling, uint32_t
> tr_mode, uint32_t cpp,
> * untiled, the masks are set to 0.
> */
> void
> -intel_get_tile_masks(uint32_t tiling, uint32_t tr_mode, uint32_t cpp,
> +intel_get_tile_masks(uint32_t tiling, uint32_t cpp,
> uint32_t *mask_x, uint32_t *mask_y)
> {
> uint32_t tile_w_bytes, tile_h;
>
> - intel_get_tile_dims(tiling, tr_mode, cpp, &tile_w_bytes, &tile_h);
> + intel_get_tile_dims(tiling, cpp, &tile_w_bytes, &tile_h);
>
> *mask_x = tile_w_bytes / cpp - 1;
> *mask_y = tile_h - 1;
> @@ -1264,7 +1198,7 @@ intel_miptree_get_tile_offsets(const struct
> intel_mipmap_tree *mt,
> uint32_t x, y;
> uint32_t mask_x, mask_y;
>
> - intel_get_tile_masks(mt->tiling, mt->tr_mode, mt->cpp, &mask_x,
> &mask_y);
> + intel_get_tile_masks(mt->tiling, mt->cpp, &mask_x, &mask_y);
> intel_miptree_get_image_offset(mt, level, slice, &x, &y);
>
> *tile_x = x & mask_x;
> @@ -3072,11 +3006,9 @@ use_intel_mipree_map_blit(struct brw_context *brw,
> {
> if (brw->has_llc &&
> /* It's probably not worth swapping to the blit ring because of
> - * all the overhead involved. But, we must use blitter for the
> - * surfaces with INTEL_MIPTREE_TRMODE_{YF,YS}.
> + * all the overhead involved.
> */
> - (!(mode & GL_MAP_WRITE_BIT) ||
> - mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE) &&
> + !(mode & GL_MAP_WRITE_BIT) &&
> !mt->compressed &&
> (mt->tiling == I915_TILING_X ||
> /* Prior to Sandybridge, the blitter can't handle Y tiling */
> @@ -3151,8 +3083,6 @@ intel_miptree_map(struct brw_context *brw,
> intel_miptree_map_movntdqa(brw, mt, map, level, slice);
> #endif
> } else {
> - /* intel_miptree_map_gtt() doesn't support surfaces with Yf/Ys
> tiling. */
> - assert(mt->tr_mode == INTEL_MIPTREE_TRMODE_NONE);
> intel_miptree_map_gtt(brw, mt, map, level, slice);
> }
>
> @@ -3267,16 +3197,7 @@ intel_miptree_get_isl_tiling(const struct
> intel_mipmap_tree *mt)
> case I915_TILING_X:
> return ISL_TILING_X;
> case I915_TILING_Y:
> - switch (mt->tr_mode) {
> - case INTEL_MIPTREE_TRMODE_NONE:
> return ISL_TILING_Y0;
> - case INTEL_MIPTREE_TRMODE_YF:
> - return ISL_TILING_Yf;
> - case INTEL_MIPTREE_TRMODE_YS:
> - return ISL_TILING_Ys;
> - default:
> - unreachable("Invalid tiled resource mode");
> - }
> default:
> unreachable("Invalid tiling mode");
> }
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> index 27bcdfb..c03233a 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> @@ -333,13 +333,6 @@ struct intel_miptree_hiz_buffer
> struct intel_mipmap_tree *mt;
> };
>
> -/* Tile resource modes */
> -enum intel_miptree_tr_mode {
> - INTEL_MIPTREE_TRMODE_NONE,
> - INTEL_MIPTREE_TRMODE_YF,
> - INTEL_MIPTREE_TRMODE_YS
> -};
> -
> struct intel_mipmap_tree
> {
> /**
> @@ -374,12 +367,6 @@ struct intel_mipmap_tree
> uint32_t tiling;
>
> /**
> - * @see RENDER_SURFACE_STATE.TiledResourceMode
> - * @see 3DSTATE_DEPTH_BUFFER.TiledResourceMode
> - */
> - enum intel_miptree_tr_mode tr_mode;
> -
> - /**
> * @brief One of GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, etc.
> *
> * @see RENDER_SURFACE_STATE.SurfaceType
> @@ -806,11 +793,11 @@ intel_get_image_dims(struct gl_texture_image *image,
> int *width, int *height, int *depth);
>
> void
> -intel_get_tile_masks(uint32_t tiling, uint32_t tr_mode, uint32_t cpp,
> +intel_get_tile_masks(uint32_t tiling, uint32_t cpp,
> uint32_t *mask_x, uint32_t *mask_y);
>
> void
> -intel_get_tile_dims(uint32_t tiling, uint32_t tr_mode, uint32_t cpp,
> +intel_get_tile_dims(uint32_t tiling, uint32_t cpp,
> uint32_t *tile_w, uint32_t *tile_h);
>
> uint32_t
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170321/59c5ae1d/attachment-0001.html>
More information about the mesa-dev
mailing list