[Mesa-dev] [PATCH 1/3] dri: Add helpers for implementing allocBuffer/releaseBuffer with __DRIimage
Eric Anholt
eric at anholt.net
Tue Nov 12 12:15:38 PST 2013
Kristian Høgsberg <krh at bitplanet.net> writes:
> Drivers that only call getBuffers to request color buffers can use these
> generic, __DRIimage based helpers to implement the allocBuffer and
> releaseBuffer functions of __DRIdri2Extension.
>
> For the intel dri driver, this consolidates window system color buffer
> allocation in intel_create_image().
>
> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
> src/mesa/drivers/dri/common/dri_util.c | 75 ++++++++++++++++++++++++++++++++
> src/mesa/drivers/dri/common/dri_util.h | 10 +++++
> src/mesa/drivers/dri/i915/intel_screen.c | 56 +-----------------------
> src/mesa/drivers/dri/i965/intel_screen.c | 55 +----------------------
> 4 files changed, 89 insertions(+), 107 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
> index 86cf24c..a7328e4 100644
> --- a/src/mesa/drivers/dri/common/dri_util.c
> +++ b/src/mesa/drivers/dri/common/dri_util.c
> @@ -115,6 +115,7 @@ driCreateNewScreen2(int scrn, int fd,
> {
> static const __DRIextension *emptyExtensionList[] = { NULL };
> __DRIscreen *psp;
> + int i;
>
> psp = calloc(1, sizeof(*psp));
> if (!psp)
> @@ -161,6 +162,11 @@ driCreateNewScreen2(int scrn, int fd,
> return NULL;
> }
>
> + for (i = 0; psp->extensions[i]; i++) {
> + if (strcmp(psp->extensions[i]->name, __DRI_IMAGE) == 0)
> + psp->image_extension = (__DRIimageExtension *) psp->extensions[i];
> + }
> +
> int gl_version_override = _mesa_get_gl_version_override();
> if (gl_version_override >= 31) {
> psp->max_gl_core_version = MAX2(psp->max_gl_core_version,
> @@ -862,6 +868,75 @@ driImageFormatToGLFormat(uint32_t image_format)
> }
> }
>
> +struct dri_image_buffer {
> + __DRIbuffer base;
> + __DRIimage *image;
> +};
> +
> +__DRIbuffer *
> +driAllocateBuffer(__DRIscreen *screen,
> + unsigned attachment, unsigned format,
> + int width, int height)
> +{
> + struct dri_image_buffer *buffer;
> + __DRIimageExtension *image = screen->image_extension;
> + int dri_format, name, stride;
> +
> + assert(attachment == __DRI_BUFFER_FRONT_LEFT ||
> + attachment == __DRI_BUFFER_BACK_LEFT);
> +
> + /* We just need a __DRI_IMAGE_FORMAT code that has a cpp that matches
> + * format / 8. The image format code is stored in the __DRIimage, but the
> + * __DRIbuffer we create from the image, only stores the cpp. */
s/, only/ only/
> +
> + switch (format) {
> + case 32:
> + dri_format = __DRI_IMAGE_FORMAT_XRGB8888;
> + break;
> + case 16:
> + dri_format = __DRI_IMAGE_FORMAT_RGB565;
> + break;
> + default:
> + return NULL;
> + }
> +
> + buffer = calloc(1, sizeof *buffer);
> + if (buffer == NULL)
> + return NULL;
> +
> + buffer->image = image->createImage(screen,
> + width, height, dri_format,
> + __DRI_IMAGE_USE_SHARE |
> + __DRI_IMAGE_USE_SCANOUT,
> + buffer);
Chad's right about scanout here.
Other than that, this series is:
Reviewed-by: Eric Anholt <eric at anholt.net>
I don't have a strong opinion on the stable nomination for the later two
patches. It feels wrong to me to cherry-pick feature-ish work after the
branchpoint, but I'm not the maintainer of the code in question so it's
not my business (and I understand how desirable not generating names for
all your buffers is, from a security perspective).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131112/3a297fdc/attachment.pgp>
More information about the mesa-dev
mailing list