diff options
author | Eric Anholt <[email protected]> | 2019-10-14 12:33:42 -0400 |
---|---|---|
committer | Jonathan Marek <[email protected]> | 2019-10-15 07:56:19 -0400 |
commit | 776a9ce36b060d516b4b7407a701ee7890f0bf2f (patch) | |
tree | 69cbbf049e018bdc98008a64a5db3662928c1739 /src | |
parent | 8193c2b08b9ea39947d3c967109403b2f4b3d128 (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]>
Diffstat (limited to 'src')
-rw-r--r-- | src/freedreno/vulkan/tu_cmd_buffer.c | 8 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_image.c | 9 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_private.h | 3 |
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 */ |