From: Ian Romanick <ian.d.roman...@intel.com> GL_DOT3_RGB_EXT and GL_DOT3_RGBA_EXT. are nearly identical to GL_DOT3_RGB and GL_DOT3_RGBA. The only difference is the _EXT versions do not apply the post-scale. Just smash logscale to 0 so that RC_OUT_SCALE_1 is always used.
NOTE: I have not actually tested this. Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- src/mesa/drivers/dri/nouveau/nv10_context.c | 1 + src/mesa/drivers/dri/nouveau/nv10_state_frag.c | 16 +++++++++++++++- src/mesa/drivers/dri/nouveau/nv20_context.c | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c b/src/mesa/drivers/dri/nouveau/nv10_context.c index 00a9358..7a86ba2 100644 --- a/src/mesa/drivers/dri/nouveau/nv10_context.c +++ b/src/mesa/drivers/dri/nouveau/nv10_context.c @@ -448,6 +448,7 @@ nv10_context_create(struct nouveau_screen *screen, gl_api api, ctx->Extensions.ARB_texture_env_crossbar = true; ctx->Extensions.ARB_texture_env_combine = true; ctx->Extensions.ARB_texture_env_dot3 = true; + ctx->Extensions.EXT_texture_env_dot3 = true; ctx->Extensions.NV_fog_distance = true; ctx->Extensions.NV_texture_rectangle = true; if (ctx->Mesa_DXTn) { diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c index e78eac3..c6e4bb0 100644 --- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c +++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c @@ -276,6 +276,20 @@ setup_combiner(struct combiner_state *rc) rc->out = RC_OUT_DOT_AB; break; + case GL_DOT3_RGB_EXT: + case GL_DOT3_RGBA_EXT: + INPUT_ARG(rc, A, 0, NORMALIZE); + INPUT_ARG(rc, B, 1, NORMALIZE); + + rc->out = RC_OUT_DOT_AB; + + /* The EXT version of the DOT3 extension does not support the + * scale factor, but the ARB version (and the version in + * OpenGL 1.3) does. + */ + rc->logscale = 0; + break; + default: assert(0); } @@ -305,7 +319,7 @@ nv10_get_general_combiner(struct gl_context *ctx, int i, if (ctx->Texture.Unit[i]._Current) { INIT_COMBINER(RGB, ctx, &rc_c, i); - if (rc_c.mode == GL_DOT3_RGBA) + if (rc_c.mode == GL_DOT3_RGBA || rc_c.mode == GL_DOT3_RGBA_EXT) rc_a = rc_c; else INIT_COMBINER(A, ctx, &rc_a, i); diff --git a/src/mesa/drivers/dri/nouveau/nv20_context.c b/src/mesa/drivers/dri/nouveau/nv20_context.c index 14329a2..ec638c0 100644 --- a/src/mesa/drivers/dri/nouveau/nv20_context.c +++ b/src/mesa/drivers/dri/nouveau/nv20_context.c @@ -459,6 +459,7 @@ nv20_context_create(struct nouveau_screen *screen, gl_api api, ctx->Extensions.ARB_texture_env_crossbar = true; ctx->Extensions.ARB_texture_env_combine = true; ctx->Extensions.ARB_texture_env_dot3 = true; + ctx->Extensions.EXT_texture_env_dot3 = true; ctx->Extensions.NV_fog_distance = true; ctx->Extensions.NV_texture_rectangle = true; if (ctx->Mesa_DXTn) { -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev