Explorar el Código

r300g: fix blending when SRC_ALPHA_SATURATE is used

tags/7.8-rc1
Marek Olšák hace 16 años
padre
commit
717c28055a
Se han modificado 1 ficheros con 7 adiciones y 2 borrados
  1. 7
    2
      src/gallium/drivers/r300/r300_state.c

+ 7
- 2
src/gallium/drivers/r300/r300_state.c Ver fichero

@@ -66,7 +66,11 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
( r300_translate_blend_factor(srcRGB) << R300_SRC_BLEND_SHIFT) |
( r300_translate_blend_factor(dstRGB) << R300_DST_BLEND_SHIFT);

/* optimization: some operations do not require the destination color */
/* Optimization: some operations do not require the destination color.
*
* When SRC_ALPHA_SATURATE is used, colorbuffer reads must be enabled,
* otherwise blending gives incorrect results. It seems to be
* a hardware bug. */
if (eqRGB == PIPE_BLEND_MIN || eqA == PIPE_BLEND_MIN ||
eqRGB == PIPE_BLEND_MAX || eqA == PIPE_BLEND_MAX ||
dstRGB != PIPE_BLENDFACTOR_ZERO ||
@@ -78,7 +82,8 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
srcA == PIPE_BLENDFACTOR_DST_COLOR ||
srcA == PIPE_BLENDFACTOR_DST_ALPHA ||
srcA == PIPE_BLENDFACTOR_INV_DST_COLOR ||
srcA == PIPE_BLENDFACTOR_INV_DST_ALPHA)
srcA == PIPE_BLENDFACTOR_INV_DST_ALPHA ||
srcRGB == PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE)
blend->blend_control |= R300_READ_ENABLE;

/* XXX implement the optimization with DISCARD_SRC_PIXELS*/

Cargando…
Cancelar
Guardar