Kristian Høgsberg <k...@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 <k...@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 <e...@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).
pgpvemsTpnkGn.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev