On Sat, May 5, 2012 at 9:44 AM, Roland Scheidegger <srol...@vmware.com> wrote: [snip]...
>> + * or the original texture stuff would not work >> + * >> + * FIXME: we may use multi-texture to handle this case. But fallback is >> + * definitely a much simple and straight way. >> + */ >> + if (ctx->Texture._EnabledUnits) >> + fallback = GL_TRUE; >> + >> if (_mesa_is_color_format(format)) { >> /* use more compact format when possible */ >> /* XXX disable special case for GL_LUMINANCE for now to work around > > Wouldn't you also have to test for active fragment shader too (i.e. > essentially same test that _mesa_meta_Bitmap is doing I think they might > have the same prerequisites for fallback for the hilarious combination > of these ops with ordinary fragment shading)? Though I guess maybe you > could avoid fallback in some cases (like drawing to stencil buffer then > texture bound shouldn't matter I think though a fragment shader writing > to depth or killing fragments still would). Yes and thanks. And here is the new patch based on your comments: >From 1e1bacb8cba6ee55b4659613f8a9037b4f54d9c5 Mon Sep 17 00:00:00 2001 From: Yuanhan Liu <yuanhan....@linux.intel.com> Date: Fri, 4 May 2012 22:23:37 +0800 Subject: [PATCH] meta: do fallback when texture is enabled for DrawPixels If there are already some texture unit enabled, a fallback is needed, or the original texture stuff would not work. A much better way is to use multi-texture to handle this case: like treat the pixels as texture 1 and the original texture as texture 2. I haven't do much inverstigation on that way, but fallback is definitely a much simpler and straight way. This would fix oglc mipsel test case. v2: Roland: do fallback also for active fragment shader no need to fallback for stencil buffer Signed-off-by: Yuanhan Liu <yuanhan....@linux.intel.com> --- src/mesa/drivers/common/meta.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 95336fc..eedc889 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -2206,10 +2206,23 @@ _mesa_meta_DrawPixels(struct gl_context *ctx, */ fallback = GL_FALSE; if (ctx->_ImageTransferState || + ctx->FragmentProgram._Enabled || ctx->Fog.Enabled) { fallback = GL_TRUE; } + /* + * If there are already some texture unit enabled, a fallback is needed, + * or the original texture stuff would not work + * + * No need to fallback if drawing to stencil buffer. + * + * FIXME: we may use multi-texture to handle this case. But fallback is + * definitely a much simple and straight way. + */ + if (ctx->Texture._EnabledUnits && !_mesa_is_stencil_format(format)) + fallback = GL_TRUE; + if (_mesa_is_color_format(format)) { /* use more compact format when possible */ /* XXX disable special case for GL_LUMINANCE for now to work around -- 1.7.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev