r600g: enable blend_bypass for uint/sint
authorDave Airlie <airlied@redhat.com>
Sun, 29 Jan 2012 19:38:28 +0000 (19:38 +0000)
committerDave Airlie <airlied@redhat.com>
Mon, 30 Jan 2012 13:23:07 +0000 (13:23 +0000)
src/gallium/drivers/r600/r600_state.c

index 8e5342c81145690ceb9aaad2e5fad0c9b6f3fc3b..2dcc245ad4dd27e5177a14d8753e49ba119dac11 100644 (file)
@@ -1467,6 +1467,7 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
        unsigned offset;
        const struct util_format_description *desc;
        int i;
+       unsigned blend_bypass = 0, blend_clamp = 1;
 
        surf = (struct r600_surface *)state->cbufs[cb];
        rtex = (struct r600_resource_texture*)state->cbufs[cb]->texture;
@@ -1515,10 +1516,20 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
                endian = r600_colorformat_endian_swap(format);
        }
 
+       /* set blend bypass according to docs if SINT/UINT or
+          8/24 COLOR variants */
+       if (ntype == V_0280A0_NUMBER_UINT || ntype == V_0280A0_NUMBER_SINT ||
+           format == V_0280A0_COLOR_8_24 || format == V_0280A0_COLOR_24_8 ||
+           format == V_0280A0_COLOR_X24_8_32_FLOAT) {
+               blend_clamp = 0;
+               blend_bypass = 1;
+       }
+
        color_info = S_0280A0_FORMAT(format) |
                S_0280A0_COMP_SWAP(swap) |
                S_0280A0_ARRAY_MODE(rtex->array_mode[level]) |
-               S_0280A0_BLEND_CLAMP(1) |
+               S_0280A0_BLEND_BYPASS(blend_bypass) |
+               S_0280A0_BLEND_CLAMP(blend_clamp) |
                S_0280A0_NUMBER_TYPE(ntype) |
                S_0280A0_ENDIAN(endian);