[Mesa-dev] [PATCH v2 1/2] i965: Use helper function for modifier -> tiling
Emil Velikov
emil.l.velikov at gmail.com
Thu May 4 12:27:26 UTC 2017
On 4 May 2017 at 10:14, Daniel Stone <daniels at collabora.com> wrote:
> Use a helper function and struct to convert between a modifier and
> tiling mode, so we can use it later for a tiling -> modifier lookup.
>
I think that this patch leads to a functionality change. See below for more.
If that's intentional please mention it in the commit log.
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> Cc: Ben Widawsky <ben at bwidawsk.net>
> ---
> src/mesa/drivers/dri/i965/intel_screen.c | 49 +++++++++++++++++++++-----------
> 1 file changed, 32 insertions(+), 17 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> index 34a5f18af2..e43f9a5c3a 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -290,6 +290,28 @@ static struct intel_image_format intel_image_formats[] = {
> { 0, 1, 0, __DRI_IMAGE_FORMAT_ARGB8888, 4 } } }
> };
>
> +static const struct {
> + uint32_t tiling;
> + uint64_t modifier;
> +} tiling_modifier_map[] = {
> + { .tiling = I915_TILING_NONE, .modifier = DRM_FORMAT_MOD_LINEAR },
> + { .tiling = I915_TILING_X, .modifier = I915_FORMAT_MOD_X_TILED },
> + { .tiling = I915_TILING_Y, .modifier = I915_FORMAT_MOD_Y_TILED },
> +};
> +
> +static uint32_t
> +modifier_to_tiling(uint64_t modifier)
> +{
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(tiling_modifier_map); i++) {
> + if (tiling_modifier_map[i].modifier == modifier)
> + return tiling_modifier_map[i].tiling;
> + }
> +
> + return I915_TILING_NONE;
> +}
> +
> static void
> intel_image_warn_if_unaligned(__DRIimage *image, const char *func)
> {
> @@ -568,10 +590,7 @@ intel_create_image_common(__DRIscreen *dri_screen,
> {
> __DRIimage *image;
> struct intel_screen *screen = dri_screen->driverPrivate;
> - /* Historically, X-tiled was the default, and so lack of modifier means
> - * X-tiled.
> - */
> - uint32_t tiling = I915_TILING_X;
> + uint32_t tiling;
> int cpp;
>
> /* Callers of this may specify a modifier, or a dri usage, but not both. The
> @@ -581,21 +600,17 @@ intel_create_image_common(__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:
> + if (modifier == DRM_FORMAT_MOD_INVALID) {
> + /* User requested specific modifiers, none of which work */
> if (modifiers)
> return NULL;
> - default:
> - break;
Originally, here we'll use I915_TILING_X...
> +
> + /* Historically, X-tiled was the default, and so lack of modifier means
> + * X-tiled.
> + */
> + tiling = I915_TILING_X;
> + } else {
> + tiling = modifier_to_tiling(modifier);
... while now we'll get I915_TILING_NONE.
Regards,
Emil
More information about the mesa-dev
mailing list