summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan/anv_image.c
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-01-24 19:47:14 -0800
committerDaniel Stone <[email protected]>2018-02-21 22:37:10 +0000
commitadca1e4a92a53a403b7620c3356dcf038f0bcecc (patch)
tree58d26708fe61e40080bdca7526a78b3c8322dbf1 /src/intel/vulkan/anv_image.c
parentf5433e4d6ce247b86daed741c07aa99f2bd02c0d (diff)
anv/image: Separate modifiers from legacy scanout
For a bit there, we had a bug in i965 where it ignored the tiling of the modifier and used the one from the BO instead. At one point, we though this was best fixed by setting a tiling from Vulkan. However, we've decided that i965 was just doing the wrong thing and have fixed it as of 50485723523d2948a44570ba110f02f726f86a54. The old assumptions also affected the solution we used for legacy scanout in Vulkan. Instead of treating it specially, we just treated it like a modifier like we do in GL. This commit goes back to making it it's own thing so that it's clear in the driver when we're using modifiers and when we're using legacy paths. v2 (Jason Ekstrand): - Rename legacy_scanout to needs_set_tiling Reviewed-by: Daniel Stone <[email protected]>
Diffstat (limited to 'src/intel/vulkan/anv_image.c')
-rw-r--r--src/intel/vulkan/anv_image.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index a297cc47320..c3d1810cee8 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -93,7 +93,8 @@ choose_isl_surf_usage(VkImageCreateFlags vk_create_flags,
static isl_tiling_flags_t
choose_isl_tiling_flags(const struct anv_image_create_info *anv_info,
- const struct isl_drm_modifier_info *isl_mod_info)
+ const struct isl_drm_modifier_info *isl_mod_info,
+ bool legacy_scanout)
{
const VkImageCreateInfo *base_info = anv_info->vk_info;
isl_tiling_flags_t flags = 0;
@@ -112,6 +113,9 @@ choose_isl_tiling_flags(const struct anv_image_create_info *anv_info,
if (anv_info->isl_tiling_flags)
flags &= anv_info->isl_tiling_flags;
+ if (legacy_scanout)
+ flags &= ISL_TILING_LINEAR_BIT | ISL_TILING_X_BIT;
+
if (isl_mod_info)
flags &= 1 << isl_mod_info->tiling;
@@ -504,19 +508,6 @@ make_surface(const struct anv_device *dev,
return VK_SUCCESS;
}
-static const struct isl_drm_modifier_info *
-get_legacy_scanout_drm_format_mod(VkImageTiling tiling)
-{
- switch (tiling) {
- case VK_IMAGE_TILING_OPTIMAL:
- return isl_drm_modifier_get_info(I915_FORMAT_MOD_X_TILED);
- case VK_IMAGE_TILING_LINEAR:
- return isl_drm_modifier_get_info(DRM_FORMAT_MOD_LINEAR);
- default:
- unreachable("bad VkImageTiling");
- }
-}
-
VkResult
anv_image_create(VkDevice _device,
const struct anv_image_create_info *create_info,
@@ -533,8 +524,6 @@ anv_image_create(VkDevice _device,
const struct wsi_image_create_info *wsi_info =
vk_find_struct_const(pCreateInfo->pNext, WSI_IMAGE_CREATE_INFO_MESA);
- if (wsi_info && wsi_info->scanout)
- isl_mod_info = get_legacy_scanout_drm_format_mod(pCreateInfo->tiling);
anv_assert(pCreateInfo->mipLevels > 0);
anv_assert(pCreateInfo->arrayLayers > 0);
@@ -559,14 +548,14 @@ anv_image_create(VkDevice _device,
image->usage = pCreateInfo->usage;
image->tiling = pCreateInfo->tiling;
image->disjoint = pCreateInfo->flags & VK_IMAGE_CREATE_DISJOINT_BIT_KHR;
- image->drm_format_mod = isl_mod_info ? isl_mod_info->modifier :
- DRM_FORMAT_MOD_INVALID;
+ image->needs_set_tiling = wsi_info && wsi_info->scanout;
const struct anv_format *format = anv_get_format(image->vk_format);
assert(format != NULL);
const isl_tiling_flags_t isl_tiling_flags =
- choose_isl_tiling_flags(create_info, isl_mod_info);
+ choose_isl_tiling_flags(create_info, isl_mod_info,
+ image->needs_set_tiling);
image->n_planes = format->n_planes;