[PATCH] meta: do fallback when texture is enabled for DrawPixels
Yuanhan Liu
yuanhan.liu at linux.intel.com
Fri May 4 07:23:37 PDT 2012
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.liu at 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 =3D GL_FALSE;
if (ctx->_ImageTransferState ||
+ ctx->FragmentProgram._Enabled ||
ctx->Fog.Enabled) {
fallback =3D 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 =3D 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
--=20
1.7.3.1
More information about the mesa-dev
mailing list