summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2019-10-14 12:33:42 -0400
committerJonathan Marek <[email protected]>2019-10-15 07:56:19 -0400
commit776a9ce36b060d516b4b7407a701ee7890f0bf2f (patch)
tree69cbbf049e018bdc98008a64a5db3662928c1739
parent8193c2b08b9ea39947d3c967109403b2f4b3d128 (diff)
turnip: Set up the correct tiling mode for small attachments.
Noticed while debugging a tiling-looking issue by comparing our gmem blit setup to freedreno's. Reviewed-by: Kristian H. Kristensen <[email protected]>
-rw-r--r--src/freedreno/vulkan/tu_cmd_buffer.c8
-rw-r--r--src/freedreno/vulkan/tu_image.c9
-rw-r--r--src/freedreno/vulkan/tu_private.h3
3 files changed, 17 insertions, 3 deletions
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index 34da6d0e88c..863c082912c 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -440,7 +440,8 @@ tu6_emit_mrt(struct tu_cmd_buffer *cmd, struct tu_cs *cs)
const struct tu_image_view *iview = fb->attachments[a].attachment;
const struct tu_image_level *slice =
&iview->image->levels[iview->base_mip];
- const enum a6xx_tile_mode tile_mode = iview->image->tile_mode;
+ const enum a6xx_tile_mode tile_mode =
+ tu6_get_image_tile_mode(iview->image, iview->base_mip);
uint32_t stride = 0;
uint32_t offset = 0;
@@ -610,13 +611,14 @@ tu6_emit_blit_info(struct tu_cmd_buffer *cmd,
tu_cs_emit_pkt4(cs, REG_A6XX_RB_BLIT_INFO, 1);
tu_cs_emit(cs, blit_info);
- /* tile mode? */
const struct tu_native_format *format =
tu6_get_native_format(iview->vk_format);
assert(format && format->rb >= 0);
+ enum a6xx_tile_mode tile_mode =
+ tu6_get_image_tile_mode(iview->image, iview->base_mip);
tu_cs_emit_pkt4(cs, REG_A6XX_RB_BLIT_DST_INFO, 5);
- tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_TILE_MODE(iview->image->tile_mode) |
+ tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_TILE_MODE(tile_mode) |
A6XX_RB_BLIT_DST_INFO_SAMPLES(samples) |
A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(format->rb) |
A6XX_RB_BLIT_DST_INFO_COLOR_SWAP(format->swap));
diff --git a/src/freedreno/vulkan/tu_image.c b/src/freedreno/vulkan/tu_image.c
index 6ac1d48c188..50bd1dbbb19 100644
--- a/src/freedreno/vulkan/tu_image.c
+++ b/src/freedreno/vulkan/tu_image.c
@@ -39,6 +39,15 @@ image_level_linear(struct tu_image *image, int level)
return w < 16;
}
+enum a6xx_tile_mode
+tu6_get_image_tile_mode(struct tu_image *image, int level)
+{
+ if (image_level_linear(image, level))
+ return TILE6_LINEAR;
+ else
+ return image->tile_mode;
+}
+
/* indexed by cpp, including msaa 2x and 4x: */
static const struct {
unsigned pitchalign;
diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h
index af1c779885e..405fa20b4f5 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -1297,6 +1297,9 @@ tu_get_levelCount(const struct tu_image *image,
: range->levelCount;
}
+enum a6xx_tile_mode
+tu6_get_image_tile_mode(struct tu_image *image, int level);
+
struct tu_image_view
{
struct tu_image *image; /**< VkImageViewCreateInfo::image */