Merge branch 'gallium-userbuf'
[mesa.git] / src / gallium / drivers / r600 / evergreen_state.c
index a26b44516f9efb7e05c2929d43937e74a4366c14..81aedb5c0ac21cb25b7cdcfba000609012eb6b54 100644 (file)
@@ -796,11 +796,11 @@ static void *evergreen_create_dsa_state(struct pipe_context *ctx,
                alpha_test_control |= S_028410_ALPHA_TEST_ENABLE(1);
                alpha_ref = fui(state->alpha.ref_value);
        }
+       dsa->sx_alpha_test_control = alpha_test_control & 0xff;
        dsa->alpha_ref = alpha_ref;
 
        /* misc */
        db_render_control = 0;
-       r600_pipe_state_add_reg(rstate, R_028410_SX_ALPHA_TEST_CONTROL, alpha_test_control);
        r600_pipe_state_add_reg(rstate, R_028800_DB_DEPTH_CONTROL, db_depth_control);
        r600_pipe_state_add_reg(rstate, R_028000_DB_RENDER_CONTROL, db_render_control);
        return rstate;
@@ -1177,7 +1177,7 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
 {
        struct r600_context *rctx = (struct r600_context *)ctx;
        struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
-       struct pipe_resource *cbuf;
+       struct pipe_constant_buffer cb;
 
        if (rstate == NULL)
                return;
@@ -1203,12 +1203,12 @@ static void evergreen_set_clip_state(struct pipe_context *ctx,
        rctx->states[R600_PIPE_STATE_CLIP] = rstate;
        r600_context_pipe_state_set(rctx, rstate);
 
-       cbuf = pipe_user_buffer_create(ctx->screen,
-                                   state->ucp,
-                                   4*4*8, /* 8*4 floats */
-                                   PIPE_BIND_CONSTANT_BUFFER);
-       r600_set_constant_buffer(ctx, PIPE_SHADER_VERTEX, 1, cbuf);
-       pipe_resource_reference(&cbuf, NULL);
+       cb.buffer = NULL;
+       cb.user_buffer = state->ucp;
+       cb.buffer_offset = 0;
+       cb.buffer_size = 4*4*8;
+       r600_set_constant_buffer(ctx, PIPE_SHADER_VERTEX, 1, &cb);
+       pipe_resource_reference(&cb.buffer, NULL);
 }
 
 static void evergreen_set_polygon_stipple(struct pipe_context *ctx,
@@ -1408,7 +1408,7 @@ static void evergreen_cb(struct r600_context *rctx, struct r600_pipe_state *rsta
 
        format = r600_translate_colorformat(surf->base.format);
        swap = r600_translate_colorswap(surf->base.format);
-       if (rtex->resource.b.b.b.usage == PIPE_USAGE_STAGING) {
+       if (rtex->resource.b.b.usage == PIPE_USAGE_STAGING) {
                endian = ENDIAN_NONE;
        } else {
                endian = r600_colorformat_endian_swap(format);
@@ -1428,6 +1428,11 @@ static void evergreen_cb(struct r600_context *rctx, struct r600_pipe_state *rsta
                blend_bypass = 1;
        }
 
+       if (ntype == V_028C70_NUMBER_UINT || ntype == V_028C70_NUMBER_SINT)
+               rctx->sx_alpha_test_control |= S_028410_ALPHA_TEST_BYPASS(1);
+       else
+               rctx->sx_alpha_test_control &= C_028410_ALPHA_TEST_BYPASS;
+
        color_info |= S_028C70_FORMAT(format) |
                S_028C70_COMP_SWAP(swap) |
                S_028C70_BLEND_CLAMP(blend_clamp) |
@@ -1713,8 +1718,8 @@ static void evergreen_emit_db_misc_state(struct r600_context *rctx, struct r600_
 static void evergreen_emit_vertex_buffers(struct r600_context *rctx, struct r600_atom *atom)
 {
        struct radeon_winsys_cs *cs = rctx->cs;
-       struct pipe_vertex_buffer *vb = rctx->vbuf_mgr->real_vertex_buffer;
-       unsigned count = rctx->vbuf_mgr->nr_real_vertex_buffers;
+       struct pipe_vertex_buffer *vb = rctx->vertex_buffer;
+       unsigned count = rctx->nr_vertex_buffers;
        unsigned i;
        uint64_t va;
 
@@ -1725,7 +1730,7 @@ static void evergreen_emit_vertex_buffers(struct r600_context *rctx, struct r600
                        continue;
                }
 
-               va = r600_resource_va(&rctx->screen->screen, &rbuffer->b.b.b);
+               va = r600_resource_va(&rctx->screen->screen, &rbuffer->b.b);
                va += vb[i].buffer_offset;
 
                /* fetch resources start at index 992 */
@@ -1762,7 +1767,7 @@ static void evergreen_emit_constant_buffer(struct r600_context *rctx,
        uint32_t dirty_mask = state->dirty_mask;
 
        while (dirty_mask) {
-               struct r600_constant_buffer *cb;
+               struct pipe_constant_buffer *cb;
                struct r600_resource *rbuffer;
                uint64_t va;
                unsigned buffer_index = ffs(dirty_mask) - 1;
@@ -1771,7 +1776,7 @@ static void evergreen_emit_constant_buffer(struct r600_context *rctx,
                rbuffer = (struct r600_resource*)cb->buffer;
                assert(rbuffer);
 
-               va = r600_resource_va(&rctx->screen->screen, &rbuffer->b.b.b);
+               va = r600_resource_va(&rctx->screen->screen, &rbuffer->b.b);
                va += cb->buffer_offset;
 
                r600_write_context_reg(cs, reg_alu_constbuf_size + buffer_index * 4,
@@ -1866,7 +1871,6 @@ void evergreen_init_state_functions(struct r600_context *rctx)
        rctx->context.set_vertex_sampler_views = evergreen_set_vs_sampler_view;
        rctx->context.set_viewport_state = evergreen_set_viewport_state;
        rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
-       rctx->context.redefine_user_buffer = u_default_redefine_user_buffer;
        rctx->context.texture_barrier = r600_texture_barrier;
        rctx->context.create_stream_output_target = r600_create_so_target;
        rctx->context.stream_output_target_destroy = r600_so_target_destroy;