Eric Anholt wrote: > 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?
I agree with that. > 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. We tend to keep derived state (marked with leading _underscore) for things that will be frequently accessed. I wouldn't do that for glGet() state. -Brian ------------------------------------------------------------------------------ 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