From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher James Halse Rogers Subject: Re: [PATCH 3/8] dri/intel: Add explicit size parameter to intel_region_alloc_for_fd Date: Thu, 07 Nov 2013 16:17:47 +1100 Message-ID: <1383801467.26497.16.camel@RedTail> References: <1383618208-21310-1-git-send-email-keithp@keithp.com> <1383618208-21310-4-git-send-email-keithp@keithp.com> <20131105222300.GA5220@tokamak.local> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1063481415==" Return-path: Received: from youngberry.canonical.com (youngberry.canonical.com [91.189.89.112]) by gabe.freedesktop.org (Postfix) with ESMTP id 470113836E for ; Wed, 6 Nov 2013 21:18:02 -0800 (PST) In-Reply-To: <20131105222300.GA5220@tokamak.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Kristian =?ISO-8859-1?Q?H=F8gsberg?= Cc: mesa3d-dev@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org --===============1063481415== Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-11vbY4RMiNoI3hTSUvju" --=-11vbY4RMiNoI3hTSUvju Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2013-11-05 at 14:23 -0800, Kristian H=C3=B8gsberg wrote: > On Mon, Nov 04, 2013 at 06:23:23PM -0800, Keith Packard wrote: > > Instead of assuming that the size will be height * pitch, have the call= er pass > > in the size explicitly. > >=20 > > Signed-off-by: Keith Packard > > --- > > src/mesa/drivers/dri/i915/intel_regions.c | 4 ++-- > > src/mesa/drivers/dri/i915/intel_regions.h | 2 +- > > src/mesa/drivers/dri/i915/intel_screen.c | 2 +- > > src/mesa/drivers/dri/i965/intel_regions.c | 4 ++-- > > src/mesa/drivers/dri/i965/intel_regions.h | 1 + > > src/mesa/drivers/dri/i965/intel_screen.c | 2 +- > > 6 files changed, 8 insertions(+), 7 deletions(-) > >=20 > > diff --git a/src/mesa/drivers/dri/i915/intel_regions.c b/src/mesa/drive= rs/dri/i915/intel_regions.c > > index 44f7030..9f5b89e 100644 > > --- a/src/mesa/drivers/dri/i915/intel_regions.c > > +++ b/src/mesa/drivers/dri/i915/intel_regions.c > > @@ -209,6 +209,7 @@ struct intel_region * > > intel_region_alloc_for_fd(struct intel_screen *screen, > > GLuint cpp, > > GLuint width, GLuint height, GLuint pitch, > > + GLuint size, > > int fd, const char *name) > > { > > struct intel_region *region; > > @@ -216,8 +217,7 @@ intel_region_alloc_for_fd(struct intel_screen *scre= en, > > int ret; > > uint32_t bit_6_swizzle, tiling; > > =20 > > - buffer =3D drm_intel_bo_gem_create_from_prime(screen->bufmgr, > > - fd, height * pitch); > > + buffer =3D drm_intel_bo_gem_create_from_prime(screen->bufmgr, fd, s= ize); >=20 > The 3.12 kernel let's you get the bo size from lseek on the dma_buf > fd. I added libdrm support for getting the size that, and if that > works, it overrides the user provided size: >=20 > http://cgit.freedesktop.org/mesa/drm/commit/?id=3D9c52c3dc4763336884277= d8005eac7e6efb77600 >=20 > 3.12 is the first kernel where dma_buf fd passing works reliably > anyway and the first kernel with render-nodes, so it's not worth the > trouble to try to make this work for older kernels. >=20 > Regardless, this patchs looks good. >=20 > Reviewed-by: Kristian H=C3=B8gsberg >=20 > > if (buffer =3D=3D NULL) > > return NULL; > > ret =3D drm_intel_bo_get_tiling(buffer, &tiling, &bit_6_swizzle); > > diff --git a/src/mesa/drivers/dri/i915/intel_regions.h b/src/mesa/drive= rs/dri/i915/intel_regions.h > > index 5c612a9..6bc4a42 100644 > > --- a/src/mesa/drivers/dri/i915/intel_regions.h > > +++ b/src/mesa/drivers/dri/i915/intel_regions.h > > @@ -91,7 +91,7 @@ struct intel_region * > > intel_region_alloc_for_fd(struct intel_screen *screen, > > GLuint cpp, > > GLuint width, GLuint height, GLuint pitch, > > - int fd, const char *name); > > + GLuint size, int fd, const char *name); > > =20 > > bool > > intel_region_flink(struct intel_region *region, uint32_t *name); > > diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/driver= s/dri/i915/intel_screen.c > > index 3f54752..085e894 100644 > > --- a/src/mesa/drivers/dri/i915/intel_screen.c > > +++ b/src/mesa/drivers/dri/i915/intel_screen.c > > @@ -653,7 +653,7 @@ intel_create_image_from_fds(__DRIscreen *screen, > > return NULL; > > =20 > > image->region =3D intel_region_alloc_for_fd(intelScreen, > > - 1, width, height, > > + 1, width, height, height = * strides[0], > > strides[0], fds[0], "imag= e"); You've presumably noticed this already, but this is the wrong way round - you're passing height * stride as pitch, and stride as size. This makes for awesome rendering. > > if (image->region =3D=3D NULL) { > > free(image); > > diff --git a/src/mesa/drivers/dri/i965/intel_regions.c b/src/mesa/drive= rs/dri/i965/intel_regions.c > > index a6b80fd..3920f4f 100644 > > --- a/src/mesa/drivers/dri/i965/intel_regions.c > > +++ b/src/mesa/drivers/dri/i965/intel_regions.c > > @@ -209,6 +209,7 @@ struct intel_region * > > intel_region_alloc_for_fd(struct intel_screen *screen, > > GLuint cpp, > > GLuint width, GLuint height, GLuint pitch, > > + GLuint size, > > int fd, const char *name) > > { > > struct intel_region *region; > > @@ -216,8 +217,7 @@ intel_region_alloc_for_fd(struct intel_screen *scre= en, > > int ret; > > uint32_t bit_6_swizzle, tiling; > > =20 > > - buffer =3D drm_intel_bo_gem_create_from_prime(screen->bufmgr, > > - fd, height * pitch); > > + buffer =3D drm_intel_bo_gem_create_from_prime(screen->bufmgr, fd, s= ize); > > if (buffer =3D=3D NULL) > > return NULL; > > ret =3D drm_intel_bo_get_tiling(buffer, &tiling, &bit_6_swizzle); > > diff --git a/src/mesa/drivers/dri/i965/intel_regions.h b/src/mesa/drive= rs/dri/i965/intel_regions.h > > index f08a113..05dfef3 100644 > > --- a/src/mesa/drivers/dri/i965/intel_regions.h > > +++ b/src/mesa/drivers/dri/i965/intel_regions.h > > @@ -92,6 +92,7 @@ struct intel_region * > > intel_region_alloc_for_fd(struct intel_screen *screen, > > GLuint cpp, > > GLuint width, GLuint height, GLuint pitch, > > + GLuint size, > > int fd, const char *name); > > =20 > > bool > > diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/driver= s/dri/i965/intel_screen.c > > index ce8124b..b89b1a5 100644 > > --- a/src/mesa/drivers/dri/i965/intel_screen.c > > +++ b/src/mesa/drivers/dri/i965/intel_screen.c > > @@ -718,7 +718,7 @@ intel_create_image_from_fds(__DRIscreen *screen, > > return NULL; > > =20 > > image->region =3D intel_region_alloc_for_fd(intelScreen, > > - 1, width, height, > > + 1, width, height, height = * strides[0], > > strides[0], fds[0], "imag= e"); > > if (image->region =3D=3D NULL) { > > free(image); > > --=20 > > 1.8.4.2 > >=20 > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel --=-11vbY4RMiNoI3hTSUvju Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.15 (GNU/Linux) iQIcBAABCAAGBQJSeyJ7AAoJEBiz9Q/lkjwY0P8QAJQHb0COgEgxbA0aC9FK6V90 vhPFqpkEpKl5IMZGCE5HihkqCgfIrhv0QU1Ykb88NVH5+PeBKbPldifHVj3IWxVh dCHMrVW0vtgEzgTi/ZmKrq38NIF6Bcae51Qo3Ob5TAi9IMyee9aOwPVD1yGHvh9W a5/4pTWuLp3+qBaZ16rlcOw6T1dESq1Ja3K4Of5GCb/bWsuBw9zgHjf0TfMQdpn9 a0HoLqOXRrekwVKdYDNt+hkOTBp0kbRBAP9HFQeCBpVFdAM17eRuUN2DCmulAJQI /BnjinOpxEf+ii5kGMdaK/kd0RbcXolEGCKQNDe+r25jgTsfo7VivdtgCC1dpUmx WddeyOctHNq6P2ZzuMApZi+yGvWG7WnCn0bDsW00opiXXNXyAimXVxsR14OoCZoK rwA2aOl3GIOyDJs2JSzEthT/gpS3rMbkJBygUlDBoDYccOxzC3qZPKCCtb5ioaBn 3+SVaJymCP0zuNYeLh5tZ/egAV5Y6o/4nGd7wR1Vcz4Bx0qgKpjkfrspLSdli8ea lL2j+ydZwajdb2Ut5hp5FO5Er7mMNY+0FNO/nccO1b9IXsabFrp6B/5f4rKk0Kma aaJFXfsVX+fX0eXSPu+sb932FGZkxcV4F2NFN7FcFl4XOEP0n16mVzmaPtnmluop qthEmfnVgL4Yz+qUr5BI =jHx2 -----END PGP SIGNATURE----- --=-11vbY4RMiNoI3hTSUvju-- --===============1063481415== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel --===============1063481415==--