r600g: fix lockups with and enable dual source blending on evergreen
authorMarek Olšák <maraeo@gmail.com>
Sun, 15 Jul 2012 01:38:42 +0000 (03:38 +0200)
committerMarek Olšák <maraeo@gmail.com>
Tue, 17 Jul 2012 19:22:15 +0000 (21:22 +0200)
GL_ARB_blend_func_extended is now enabled on all chipsets.

src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/r600_pipe.c

index 8f037e26129e398d61a96ec8e359b3eb2015cd27..5486a96ed92d51d5090f97f88f47524a84ad70fc 100644 (file)
@@ -1652,7 +1652,9 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
        for (i = 0; i < state->nr_cbufs; i++) {
                evergreen_cb(rctx, rstate, state, i);
        }
-
+       /* CB_COLOR1_INFO is already initialized for possible dual-src blending */
+       if (i == 1)
+               i++;
        for (; i < 8 ; i++) {
                r600_pipe_state_add_reg(rstate, R_028C70_CB_COLOR0_INFO + i * 0x3C, 0);
        }
index 48e94f51718b8c924d2282411fa72722bca225ff..2a102621183efda0f35ff67fa85b6e301f8d77e9 100644 (file)
@@ -384,6 +384,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_USER_CONSTANT_BUFFERS:
        case PIPE_CAP_COMPUTE:
        case PIPE_CAP_START_INSTANCE:
+       case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
                return 1;
 
        case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
@@ -451,9 +452,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
 
        case PIPE_CAP_MAX_TEXEL_OFFSET:
                return 7;
-
-       case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
-               return family < CHIP_CEDAR ?  1 : 0;
        }
        return 0;
 }