Since the code doesn't support modifiers yet, this patch should do nothing other than prepare for more patches.
Signed-off-by: Ben Widawsky <b...@bwidawsk.net> Acked-by: Daniel Stone <dani...@collabora.com> --- src/mesa/drivers/dri/i965/intel_screen.c | 64 ++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index b7c0a55231..e3fe2a468f 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -599,6 +599,48 @@ select_best_modifier(struct gen_device_info *devinfo, #undef YTILE } +static int +create_image_with_modifier(struct intel_screen *screen, + __DRIimage *image, uint64_t modifier, + int width, int height, int cpp) +{ + uint32_t tiling = I915_TILING_X; + unsigned long pitch; + + switch (modifier) { + case I915_FORMAT_MOD_Y_TILED: + tiling = I915_TILING_Y; + break; + case I915_FORMAT_MOD_X_TILED: + assert(tiling == I915_TILING_X); + break; + case DRM_FORMAT_MOD_LINEAR: + tiling = I915_TILING_NONE; + break; + case DRM_FORMAT_MOD_INVALID: + default: + break; + } + + image->bo = drm_intel_bo_alloc_tiled(screen->bufmgr, "image+mod", + width, height, cpp, &tiling, + &pitch, 0); + if (image->bo == NULL) + return false; + + if (tiling != I915_TILING_Y) { + drm_intel_bo_unreference(image->bo); + return false; + } + + image->width = width; + image->height = height; + image->pitch = pitch; + image->modifier = modifier; + + return true; +} + static __DRIimage * __intel_create_image(__DRIscreen *dri_screen, int width, int height, int format, @@ -623,20 +665,6 @@ __intel_create_image(__DRIscreen *dri_screen, assert(!(use && count)); uint64_t modifier = select_best_modifier(&screen->devinfo, modifiers, count); - switch (modifier) { - case I915_FORMAT_MOD_X_TILED: - assert(tiling == I915_TILING_X); - break; - case DRM_FORMAT_MOD_LINEAR: - tiling = I915_TILING_NONE; - break; - case I915_FORMAT_MOD_Y_TILED: - tiling = I915_TILING_Y; - break; - case DRM_FORMAT_MOD_INVALID: - default: - break; - } if (use & __DRI_IMAGE_USE_CURSOR) { if (width != 64 || height != 64) @@ -652,6 +680,13 @@ __intel_create_image(__DRIscreen *dri_screen, return NULL; cpp = _mesa_get_format_bytes(image->format); + if (modifier != DRM_FORMAT_MOD_INVALID) { + if (create_image_with_modifier(screen, image, modifier, width, + height, cpp)) { + return image; + } + } + image->bo = drm_intel_bo_alloc_tiled(screen->bufmgr, "image", width, height, cpp, &tiling, &pitch, 0); @@ -662,7 +697,6 @@ __intel_create_image(__DRIscreen *dri_screen, image->width = width; image->height = height; image->pitch = pitch; - image->modifier = modifier; return image; } -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev