[Mesa-dev] [PATCH 05/13] nouveau: Enable EXT_texture_env_dot3 on NV10 and NV20
Ilia Mirkin
imirkin at alum.mit.edu
Sun Aug 28 15:56:03 UTC 2016
FWIW this fails for GL_DOT3_RGBA_EXT but works for GL_DOT3_RGB_EXT
[according to glean's texCombine test]. (I suspect the existing
GL_DOT3_RGBA/RGB had a similar behavior.) I'm testing in a slightly
unsupported environment - the NV25 graph class running on a NV34
(GeForce FX 5200), but I think it's legit.
Unfortunately I know *nothing* about register combiners. Any chance
you could explain what *should* be happening wrt their hookup? [Or
even better, glance at the code.]
As part of the test, I'm getting this error:
nouveau 0000:09:01.0: gr: intr 00100000 [ERROR] nsource 00000002
[DATA_ERROR] nstatus 02000000 [BAD_ARGUMENT] ch 3 [glean[1436]] subc 7
class 0597 mthd 0aa0 data 000020c0
Method 0aa0 is RC_OUT_ALPHA(0)
[https://github.com/envytools/envytools/blob/master/rnndb/graph/nv20_3d.xml#L485],
and data 20c0 decodes as
$ lookup -a 25 -d SUBCHAN -- -v obj-class NV25_3D 0aa0 000020c0
RC_OUT_ALPHA[0] => { CD_OUTPUT = ZERO | AB_OUTPUT = SPARE0 |
SUM_OUTPUT = ZERO | AB_DOT_PRODUCT | BIAS = NONE | SCALE = NONE }
Thanks,
-ilia
On Wed, Aug 24, 2016 at 2:57 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Wed, Aug 24, 2016 at 2:46 PM, Ian Romanick <idr at freedesktop.org> wrote:
>> From: Ian Romanick <ian.d.romanick at 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.romanick at 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;
>
> rc->logscale comes from _CurrentCombine->ScaleShiftRGB/A -- I guess
> not a lot of harm in just forcing it here, but it'd be a little
> cleaner if that were not necessary. In the current state, though, this
> is
>
> Acked-by: Ilia Mirkin <imirkin at alum.mit.edu>
>
>> + 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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list