diff --git a/src/broadcom/common/v3d_tfu.h b/src/broadcom/common/v3d_tfu.h new file mode 100644 index 00000000000..ebef66feb8a --- /dev/null +++ b/src/broadcom/common/v3d_tfu.h @@ -0,0 +1,51 @@ +/* + * Copyright © 2021 Raspberry Pi + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef V3D_TFU_H +#define V3D_TFU_H + +/* Disable level 0 write, just write following mipmaps */ +#define V3D33_TFU_IOA_DIMTW (1 << 0) +#define V3D33_TFU_IOA_FORMAT_SHIFT 3 +#define V3D33_TFU_IOA_FORMAT_LINEARTILE 3 +#define V3D33_TFU_IOA_FORMAT_UBLINEAR_1_COLUMN 4 +#define V3D33_TFU_IOA_FORMAT_UBLINEAR_2_COLUMN 5 +#define V3D33_TFU_IOA_FORMAT_UIF_NO_XOR 6 +#define V3D33_TFU_IOA_FORMAT_UIF_XOR 7 + +#define V3D33_TFU_ICFG_NUMMM_SHIFT 5 +#define V3D33_TFU_ICFG_TTYPE_SHIFT 9 + +#define V3D33_TFU_ICFG_OPAD_SHIFT 22 + +#define V3D33_TFU_ICFG_FORMAT_SHIFT 18 +#define V3D33_TFU_ICFG_FORMAT_RASTER 0 +#define V3D33_TFU_ICFG_FORMAT_SAND_128 1 +#define V3D33_TFU_ICFG_FORMAT_SAND_256 2 +#define V3D33_TFU_ICFG_FORMAT_LINEARTILE 11 +#define V3D33_TFU_ICFG_FORMAT_UBLINEAR_1_COLUMN 12 +#define V3D33_TFU_ICFG_FORMAT_UBLINEAR_2_COLUMN 13 +#define V3D33_TFU_ICFG_FORMAT_UIF_NO_XOR 14 +#define V3D33_TFU_ICFG_FORMAT_UIF_XOR 15 + +#endif diff --git a/src/broadcom/vulkan/v3dv_meta_common.h b/src/broadcom/vulkan/v3dv_meta_common.h index 555b55f90b7..e7d0bd0db97 100644 --- a/src/broadcom/vulkan/v3dv_meta_common.h +++ b/src/broadcom/vulkan/v3dv_meta_common.h @@ -23,30 +23,6 @@ #ifndef V3DV_META_COMMON_H #define V3DV_META_COMMON_H -/* Disable level 0 write, just write following mipmaps */ -#define V3D_TFU_IOA_DIMTW (1 << 0) -#define V3D_TFU_IOA_FORMAT_SHIFT 3 -#define V3D_TFU_IOA_FORMAT_LINEARTILE 3 -#define V3D_TFU_IOA_FORMAT_UBLINEAR_1_COLUMN 4 -#define V3D_TFU_IOA_FORMAT_UBLINEAR_2_COLUMN 5 -#define V3D_TFU_IOA_FORMAT_UIF_NO_XOR 6 -#define V3D_TFU_IOA_FORMAT_UIF_XOR 7 - -#define V3D_TFU_ICFG_NUMMM_SHIFT 5 -#define V3D_TFU_ICFG_TTYPE_SHIFT 9 - -#define V3D_TFU_ICFG_OPAD_SHIFT 22 - -#define V3D_TFU_ICFG_FORMAT_SHIFT 18 -#define V3D_TFU_ICFG_FORMAT_RASTER 0 -#define V3D_TFU_ICFG_FORMAT_SAND_128 1 -#define V3D_TFU_ICFG_FORMAT_SAND_256 2 -#define V3D_TFU_ICFG_FORMAT_LINEARTILE 11 -#define V3D_TFU_ICFG_FORMAT_UBLINEAR_1_COLUMN 12 -#define V3D_TFU_ICFG_FORMAT_UBLINEAR_2_COLUMN 13 -#define V3D_TFU_ICFG_FORMAT_UIF_NO_XOR 14 -#define V3D_TFU_ICFG_FORMAT_UIF_XOR 15 - /** * Copy/Clear operations implemented in v3dv_meta_*.c that use the TLB hardware * need to figure out TLB programming from the target image data instead of an diff --git a/src/broadcom/vulkan/v3dvx_meta_common.c b/src/broadcom/vulkan/v3dvx_meta_common.c index 1dfbbfc57eb..eedc3f4c834 100644 --- a/src/broadcom/vulkan/v3dvx_meta_common.c +++ b/src/broadcom/vulkan/v3dvx_meta_common.c @@ -25,6 +25,7 @@ #include "v3dv_meta_common.h" #include "broadcom/common/v3d_macros.h" +#include "broadcom/common/v3d_tfu.h" #include "broadcom/cle/v3dx_pack.h" #include "broadcom/compiler/v3d_compiler.h" @@ -840,19 +841,19 @@ v3dX(meta_emit_tfu_job)(struct v3dv_cmd_buffer *cmd_buffer, tfu.iia |= src_offset; if (src_tiling == V3D_TILING_RASTER) { - tfu.icfg = V3D_TFU_ICFG_FORMAT_RASTER << V3D_TFU_ICFG_FORMAT_SHIFT; + tfu.icfg = V3D33_TFU_ICFG_FORMAT_RASTER << V3D33_TFU_ICFG_FORMAT_SHIFT; } else { - tfu.icfg = (V3D_TFU_ICFG_FORMAT_LINEARTILE + + tfu.icfg = (V3D33_TFU_ICFG_FORMAT_LINEARTILE + (src_tiling - V3D_TILING_LINEARTILE)) << - V3D_TFU_ICFG_FORMAT_SHIFT; + V3D33_TFU_ICFG_FORMAT_SHIFT; } - tfu.icfg |= format->tex_type << V3D_TFU_ICFG_TTYPE_SHIFT; + tfu.icfg |= format->tex_type << V3D33_TFU_ICFG_TTYPE_SHIFT; tfu.ioa = dst_offset; - tfu.ioa |= (V3D_TFU_IOA_FORMAT_LINEARTILE + + tfu.ioa |= (V3D33_TFU_IOA_FORMAT_LINEARTILE + (dst_tiling - V3D_TILING_LINEARTILE)) << - V3D_TFU_IOA_FORMAT_SHIFT; + V3D33_TFU_IOA_FORMAT_SHIFT; switch (src_tiling) { case V3D_TILING_UIF_NO_XOR: @@ -875,7 +876,7 @@ v3dX(meta_emit_tfu_job)(struct v3dv_cmd_buffer *cmd_buffer, uint32_t implicit_padded_height = align(height, uif_block_h); uint32_t icfg = (dst_padded_height_or_stride - implicit_padded_height) / uif_block_h; - tfu.icfg |= icfg << V3D_TFU_ICFG_OPAD_SHIFT; + tfu.icfg |= icfg << V3D33_TFU_ICFG_OPAD_SHIFT; } v3dv_cmd_buffer_add_tfu_job(cmd_buffer, &tfu); diff --git a/src/gallium/drivers/v3d/v3d_blit.c b/src/gallium/drivers/v3d/v3d_blit.c index 967d0d6d1d4..b337218cb00 100644 --- a/src/gallium/drivers/v3d/v3d_blit.c +++ b/src/gallium/drivers/v3d/v3d_blit.c @@ -27,6 +27,7 @@ #include "compiler/nir/nir_builder.h" #include "v3d_context.h" #include "broadcom/common/v3d_tiling.h" +#include "broadcom/common/v3d_tfu.h" void v3d_blitter_save(struct v3d_context *v3d) @@ -190,30 +191,6 @@ v3d_stencil_blit(struct pipe_context *ctx, struct pipe_blit_info *info) info->mask &= ~PIPE_MASK_S; } -/* Disable level 0 write, just write following mipmaps */ -#define V3D_TFU_IOA_DIMTW (1 << 0) -#define V3D_TFU_IOA_FORMAT_SHIFT 3 -#define V3D_TFU_IOA_FORMAT_LINEARTILE 3 -#define V3D_TFU_IOA_FORMAT_UBLINEAR_1_COLUMN 4 -#define V3D_TFU_IOA_FORMAT_UBLINEAR_2_COLUMN 5 -#define V3D_TFU_IOA_FORMAT_UIF_NO_XOR 6 -#define V3D_TFU_IOA_FORMAT_UIF_XOR 7 - -#define V3D_TFU_ICFG_NUMMM_SHIFT 5 -#define V3D_TFU_ICFG_TTYPE_SHIFT 9 - -#define V3D_TFU_ICFG_OPAD_SHIFT 22 - -#define V3D_TFU_ICFG_FORMAT_SHIFT 18 -#define V3D_TFU_ICFG_FORMAT_RASTER 0 -#define V3D_TFU_ICFG_FORMAT_SAND_128 1 -#define V3D_TFU_ICFG_FORMAT_SAND_256 2 -#define V3D_TFU_ICFG_FORMAT_LINEARTILE 11 -#define V3D_TFU_ICFG_FORMAT_UBLINEAR_1_COLUMN 12 -#define V3D_TFU_ICFG_FORMAT_UBLINEAR_2_COLUMN 13 -#define V3D_TFU_ICFG_FORMAT_UIF_NO_XOR 14 -#define V3D_TFU_ICFG_FORMAT_UIF_XOR 15 - static bool v3d_tfu(struct pipe_context *pctx, struct pipe_resource *pdst, @@ -289,25 +266,25 @@ v3d_tfu(struct pipe_context *pctx, v3d_layer_offset(psrc, src_level, src_layer)); tfu.iia |= src_offset; if (src_base_slice->tiling == V3D_TILING_RASTER) { - tfu.icfg |= (V3D_TFU_ICFG_FORMAT_RASTER << - V3D_TFU_ICFG_FORMAT_SHIFT); + tfu.icfg |= (V3D33_TFU_ICFG_FORMAT_RASTER << + V3D33_TFU_ICFG_FORMAT_SHIFT); } else { - tfu.icfg |= ((V3D_TFU_ICFG_FORMAT_LINEARTILE + + tfu.icfg |= ((V3D33_TFU_ICFG_FORMAT_LINEARTILE + (src_base_slice->tiling - V3D_TILING_LINEARTILE)) << - V3D_TFU_ICFG_FORMAT_SHIFT); + V3D33_TFU_ICFG_FORMAT_SHIFT); } uint32_t dst_offset = (dst->bo->offset + v3d_layer_offset(pdst, base_level, dst_layer)); tfu.ioa |= dst_offset; if (last_level != base_level) - tfu.ioa |= V3D_TFU_IOA_DIMTW; - tfu.ioa |= ((V3D_TFU_IOA_FORMAT_LINEARTILE + + tfu.ioa |= V3D33_TFU_IOA_DIMTW; + tfu.ioa |= ((V3D33_TFU_IOA_FORMAT_LINEARTILE + (dst_base_slice->tiling - V3D_TILING_LINEARTILE)) << - V3D_TFU_IOA_FORMAT_SHIFT); + V3D33_TFU_IOA_FORMAT_SHIFT); - tfu.icfg |= tex_format << V3D_TFU_ICFG_TTYPE_SHIFT; - tfu.icfg |= (last_level - base_level) << V3D_TFU_ICFG_NUMMM_SHIFT; + tfu.icfg |= tex_format << V3D33_TFU_ICFG_TTYPE_SHIFT; + tfu.icfg |= (last_level - base_level) << V3D33_TFU_ICFG_NUMMM_SHIFT; switch (src_base_slice->tiling) { case V3D_TILING_UIF_NO_XOR: @@ -336,7 +313,7 @@ v3d_tfu(struct pipe_context *pctx, tfu.icfg |= (((dst_base_slice->padded_height - implicit_padded_height) / uif_block_h) << - V3D_TFU_ICFG_OPAD_SHIFT); + V3D33_TFU_ICFG_OPAD_SHIFT); } int ret = v3d_ioctl(screen->fd, DRM_IOCTL_V3D_SUBMIT_TFU, &tfu);