[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