diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.c b/src/gallium/drivers/iris/i915/iris_bufmgr.c index 6422d17e0b7..ba257126be4 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.c +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.c @@ -108,3 +108,17 @@ int iris_i915_bo_set_tiling(struct iris_bo *bo, const struct isl_surf *surf) return ret; } + +uint64_t +iris_i915_tiling_to_modifier(uint32_t tiling) +{ + static const uint64_t map[] = { + [I915_TILING_NONE] = DRM_FORMAT_MOD_LINEAR, + [I915_TILING_X] = I915_FORMAT_MOD_X_TILED, + [I915_TILING_Y] = I915_FORMAT_MOD_Y_TILED, + }; + + assert(tiling < ARRAY_SIZE(map)); + + return map[tiling]; +} diff --git a/src/gallium/drivers/iris/i915/iris_bufmgr.h b/src/gallium/drivers/iris/i915/iris_bufmgr.h index 25ca37be396..0ebc135bd1b 100644 --- a/src/gallium/drivers/iris/i915/iris_bufmgr.h +++ b/src/gallium/drivers/iris/i915/iris_bufmgr.h @@ -34,5 +34,6 @@ bool iris_i915_bo_busy_gem(struct iris_bo *bo); int iris_i915_bo_wait_gem(struct iris_bo *bo, int64_t timeout_ns); int iris_i915_bo_get_tiling(struct iris_bo *bo, uint32_t *tiling); int iris_i915_bo_set_tiling(struct iris_bo *bo, const struct isl_surf *surf); +uint64_t iris_i915_tiling_to_modifier(uint32_t tiling); bool iris_i915_init_global_vm(struct iris_bufmgr *bufmgr, uint32_t *vm_id); diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index ae29911a6ef..147a9076fdb 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -46,6 +46,7 @@ #include "util/u_transfer_helper.h" #include "util/u_upload_mgr.h" #include "util/ralloc.h" +#include "i915/iris_bufmgr.h" #include "iris_batch.h" #include "iris_context.h" #include "iris_resource.h" @@ -54,7 +55,6 @@ #include "intel/dev/intel_debug.h" #include "isl/isl.h" #include "drm-uapi/drm_fourcc.h" -#include "drm-uapi/i915_drm.h" enum modifier_priority { MODIFIER_PRIORITY_INVALID = 0, @@ -1161,17 +1161,14 @@ iris_resource_create(struct pipe_screen *pscreen, } static uint64_t -tiling_to_modifier(uint32_t tiling) +tiling_to_modifier(struct iris_bufmgr *bufmgr, uint32_t tiling) { - static const uint64_t map[] = { - [I915_TILING_NONE] = DRM_FORMAT_MOD_LINEAR, - [I915_TILING_X] = I915_FORMAT_MOD_X_TILED, - [I915_TILING_Y] = I915_FORMAT_MOD_Y_TILED, - }; + if (iris_bufmgr_get_device_info(bufmgr)->kmd_type != INTEL_KMD_TYPE_I915) { + assert(tiling == 0); + return DRM_FORMAT_MOD_LINEAR; + } - assert(tiling < ARRAY_SIZE(map)); - - return map[tiling]; + return iris_i915_tiling_to_modifier(tiling); } static struct pipe_resource * @@ -1351,7 +1348,7 @@ iris_resource_from_handle(struct pipe_screen *pscreen, /* We have no modifier; match whatever GEM_GET_TILING says */ uint32_t tiling; iris_gem_get_tiling(main_res->bo, &tiling); - modifier = tiling_to_modifier(tiling); + modifier = tiling_to_modifier(bufmgr, tiling); } else { modifier = whandle->modifier; }