From: Daniel Stone <dani...@collabora.com> Add a simple conversion from ISL tiling to GEM BO tiling flags, and use that instead of hardcoding I915_TILING_X in the ANV WSI.
Signed-off-by: Daniel Stone <dani...@collabora.com> --- src/intel/isl/isl.c | 28 ++++++++++++++++++++++++++++ src/intel/isl/isl.h | 8 ++++++++ src/intel/vulkan/anv_wsi.c | 6 +++--- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index fd8fcf5e93..8ebe8538fa 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -27,6 +27,7 @@ #include "genxml/genX_bits.h" #include <drm_fourcc.h> +#include <i915_drm.h> #include "isl.h" #include "isl_gen4.h" @@ -107,6 +108,33 @@ isl_tiling_to_drm_format_mod(enum isl_tiling tiling, unreachable("unknown tiling in isl_tiling_to_drm_format_mod"); } +bool +isl_tiling_to_gem_tiling(enum isl_tiling isl, enum isl_aux_usage aux_usage, + uint32_t *gem) +{ + switch (isl) { + case ISL_TILING_LINEAR: + *gem = I915_TILING_NONE; + return true; + case ISL_TILING_X: + *gem = I915_TILING_X; + return true; + case ISL_TILING_Y0: + if (aux_usage != ISL_AUX_USAGE_NONE && aux_usage != ISL_AUX_USAGE_CCS_E) + return false; + *gem = I915_TILING_Y; + return true; + case ISL_TILING_Yf: + case ISL_TILING_Ys: + case ISL_TILING_W: + case ISL_TILING_HIZ: + case ISL_TILING_CCS: + return false; + } + + unreachable("unknown tiling in isl_tiling_to_gem_tiling"); +} + void isl_device_init(struct isl_device *dev, const struct gen_device_info *info, diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index 09b3850ca4..d216b05168 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1547,6 +1547,14 @@ bool isl_tiling_from_drm_format_mod(uint64_t mod, uint64_t isl_tiling_to_drm_format_mod(enum isl_tiling tiling, enum isl_aux_usage aux_usage); +/** + * Map an ISL tiling/aux pair to a GEM tiling enum. If the ISL tiling/aux mode + * is not exportable, return false. The output parameters are only written on + * success. + */ +bool isl_tiling_to_gem_tiling(enum isl_tiling isl, enum isl_aux_usage aux_usage, + uint32_t *gem_tiling); + static inline bool isl_tiling_is_any_y(enum isl_tiling tiling) { diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index 00edb220b2..b86e4f1b4a 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -241,11 +241,11 @@ anv_wsi_image_create(VkDevice device_h, anv_BindImageMemory(device_h, image_h, memory_h, 0); struct anv_surface *surface = &image->color_surface; - assert(surface->isl.tiling == ISL_TILING_X); - + uint32_t gem_tiling = I915_TILING_NONE; + isl_tiling_to_gem_tiling(surface->isl.tiling, image->aux_usage, &gem_tiling); *row_pitch = surface->isl.row_pitch; int ret = anv_gem_set_tiling(device, memory->bo->gem_handle, - surface->isl.row_pitch, I915_TILING_X); + surface->isl.row_pitch, gem_tiling); if (ret) { /* FINISHME: Choose a better error. */ result = vk_errorf(VK_ERROR_OUT_OF_DEVICE_MEMORY, -- 2.13.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev