On Mon, Jan 23, 2017 at 10:21 PM, Ben Widawsky <b...@bwidawsk.net> wrote:
> 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; > Why only Y-tiled? > + } > + > + 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; > Yeah, this is a good way to do it. > + } > + } > + > 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 >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev