[Mesa-dev] [PATCH 05/13] nouveau: Enable EXT_texture_env_dot3 on NV10 and NV20

Ian Romanick idr at freedesktop.org
Mon Aug 29 01:05:11 UTC 2016


On 08/28/2016 08:56 AM, Ilia Mirkin wrote:
> 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

Looking at the test results... any idea what it's actually doing?
Ignoring alpha and using 1.0?  Using garbage?  Other?

> 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