On Tue, 08 Dec 2009 23:38:22 -0800, Ian Romanick <i...@freedesktop.org> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Eric Anholt wrote:
> > ---
> >  src/mesa/drivers/dri/intel/intel_buffers.c    |   21 +++++++++++++++++++++
> >  src/mesa/drivers/dri/intel/intel_extensions.c |    1 +
> >  2 files changed, 22 insertions(+), 0 deletions(-)
> > 
> > diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c 
> > b/src/mesa/drivers/dri/intel/intel_buffers.c
> > index 6b12d48..cee5cf6 100644
> > --- a/src/mesa/drivers/dri/intel/intel_buffers.c
> > +++ b/src/mesa/drivers/dri/intel/intel_buffers.c
> > @@ -362,6 +362,8 @@ intelDrawBuffer(GLcontext * ctx, GLenum mode)
> >  static void
> >  intelReadBuffer(GLcontext * ctx, GLenum mode)
> >  {
> > +   struct intel_renderbuffer *irb;
> > +
> >     if ((ctx->DrawBuffer != NULL) && (ctx->DrawBuffer->Name == 0)) {
> >        struct intel_context *const intel = intel_context(ctx);
> >        const GLboolean was_front_buffer_reading =
> > @@ -390,6 +392,25 @@ intelReadBuffer(GLcontext * ctx, GLenum mode)
> >     /* Generally, functions which read pixels (glReadPixels, glCopyPixels, 
> > etc)
> >      * reference ctx->ReadBuffer and do appropriate state checks.
> >      */
> > +
> > +   /* GL_OES_read_format */
> > +   irb = intel_renderbuffer(ctx->ReadBuffer->_ColorReadBuffer);
> > +   if (irb) {
> > +      switch (irb->texformat) {
> > +      case MESA_FORMAT_ARGB8888:
> > +    ctx->ReadBuffer->ColorReadFormat = GL_BGRA;
> > +    ctx->ReadBuffer->ColorReadType = GL_UNSIGNED_BYTE;
> > +    break;
> > +      case MESA_FORMAT_RGB565:
> > +    ctx->ReadBuffer->ColorReadFormat = GL_BGR;
> > +    ctx->ReadBuffer->ColorReadType = GL_UNSIGNED_SHORT_5_6_5_REV;
> > +    break;
> > +      default:
> > +    ctx->ReadBuffer->ColorReadFormat = GL_RGBA;
> > +    ctx->ReadBuffer->ColorReadType = GL_UNSIGNED_BYTE;
> > +    break;
> > +      }
> > +   }
> 
> After hacking around with FBOs and MESA_FORMAT_* all day long (my patch
> series is coming soon!), I think this should go in a utility function
> somewhere... perhaps in fbobject.c.  For a given format, I *think* the
> preferred read format / type will be the same everywhere.  Does that
> sound right?

So, for our driver right now we do blits for those two formats.  For
others, the spans code will read them out into DataType's format, and if
we report something other than that (usually ABGR8888), we'll hit the
user with an extra conversion.

But maybe the right answer is to report the native format and say that
if going native -> native is slower than native -> abgr8888, then that
should get fixed.

The other question I had was whether a computed value like this really
deserves to live as a field updated with state changes instead of being
computed at Get time.  The overall Mesa style seems to be compute it up
front just in case someone asks, but that doesn't seem like a great way
to get an efficient stack.

Attachment: pgpG0J4ZEZRZX.pgp
Description: PGP signature

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to