On Thu, Jan 2, 2014 at 8:18 PM, Maxence Le Doré <maxence.led...@gmail.com> wrote: > Sound strange if nvidia would had chosen a different > implementation of min/max blending (where even > intel i830 allow factors with min/max blending). > Indeed, the driver doesn't set src and dst factors to ONE > when GL_MIN or GL_MAX are set as blend equation. Maybe > Francisco Jerez (going to ask him) simply forgot about > that and nv10-20 support it or nVIDIA had clearly opted > to another form of hardware implementation. > Anyway. Can't test this right now (lacks nv10 hw).
I have a NV18 plugged in. How would I go about testing this? > --- > src/mesa/drivers/dri/nouveau/nouveau_gldefs.h | 2 ++ > src/mesa/drivers/dri/nouveau/nv10_context.c | 1 + > src/mesa/drivers/dri/nouveau/nv10_state_raster.c | 10 +++++++++- > src/mesa/drivers/dri/nouveau/nv20_context.c | 1 + > 4 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/nouveau/nouveau_gldefs.h > b/src/mesa/drivers/dri/nouveau/nouveau_gldefs.h > index 46ec14e..ba65dfd 100644 > --- a/src/mesa/drivers/dri/nouveau/nouveau_gldefs.h > +++ b/src/mesa/drivers/dri/nouveau/nouveau_gldefs.h > @@ -73,8 +73,10 @@ nvgl_blend_eqn(unsigned eqn) > case GL_FUNC_ADD: > return 0x8006; > case GL_MIN: > + case GL_FACTOR_MIN_AMD: > return 0x8007; > case GL_MAX: > + case GL_FACTOR_MAX_AMD: > return 0x8008; > case GL_FUNC_SUBTRACT: > return 0x800a; > diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c > b/src/mesa/drivers/dri/nouveau/nv10_context.c > index 1918f12..6f0e539 100644 > --- a/src/mesa/drivers/dri/nouveau/nv10_context.c > +++ b/src/mesa/drivers/dri/nouveau/nv10_context.c > @@ -447,6 +447,7 @@ nv10_context_create(struct nouveau_screen *screen, const > struct gl_config *visua > ctx->Extensions.ARB_texture_env_crossbar = true; > ctx->Extensions.ARB_texture_env_combine = true; > ctx->Extensions.ARB_texture_env_dot3 = true; > + ctx->Extensions.AMD_blend_minmax_factor = 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_raster.c > b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c > index bd4a78e..bcacae6 100644 > --- a/src/mesa/drivers/dri/nouveau/nv10_state_raster.c > +++ b/src/mesa/drivers/dri/nouveau/nv10_state_raster.c > @@ -62,12 +62,20 @@ void > nv10_emit_blend_equation(struct gl_context *ctx, int emit) > { > struct nouveau_pushbuf *push = context_push(ctx); > + unsigned eqn = ctx->Color.Blend[0].EquationRGB; > > BEGIN_NV04(push, NV10_3D(BLEND_FUNC_ENABLE), 1); > PUSH_DATAb(push, ctx->Color.BlendEnabled); > > BEGIN_NV04(push, NV10_3D(BLEND_EQUATION), 1); > - PUSH_DATA (push, nvgl_blend_eqn(ctx->Color.Blend[0].EquationRGB)); > + PUSH_DATA (push, nvgl_blend_eqn(eqn)); > + > + if(eqn == GL_MIN || eqn == GL_MAX) > + { > + BEGIN_NV04(push, NV10_3D(BLEND_FUNC_SRC), 2); > + PUSH_DATA (push, NV10_3D_BLEND_FUNC_SRC_ONE); > + PUSH_DATA (push, NV10_3D_BLEND_FUNC_DST_ONE); > + } > } > > void > diff --git a/src/mesa/drivers/dri/nouveau/nv20_context.c > b/src/mesa/drivers/dri/nouveau/nv20_context.c > index 1d77132..b528798 100644 > --- a/src/mesa/drivers/dri/nouveau/nv20_context.c > +++ b/src/mesa/drivers/dri/nouveau/nv20_context.c > @@ -458,6 +458,7 @@ nv20_context_create(struct nouveau_screen *screen, const > struct gl_config *visua > ctx->Extensions.ARB_texture_env_crossbar = true; > ctx->Extensions.ARB_texture_env_combine = true; > ctx->Extensions.ARB_texture_env_dot3 = true; > + ctx->Extensions.AMD_blend_minmax_factor = true; > ctx->Extensions.NV_fog_distance = true; > ctx->Extensions.NV_texture_rectangle = true; > if (ctx->Mesa_DXTn) { > -- > 1.8.5.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev