Module: Mesa
Branch: master
Commit: b3b946b0ab88c1d7edeab183d8ad5125ba223392
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b3b946b0ab88c1d7edeab183d8ad5125ba223392

Author: Henri Verbeet <[email protected]>
Date:   Sat Jul  9 17:18:59 2011 +0200

r600g: Store the chip class in r600_pipe_context.

Signed-off-by: Henri Verbeet <[email protected]>

---

 src/gallium/drivers/r600/evergreen_state.c   |   20 ++++--------
 src/gallium/drivers/r600/r600_asm.c          |    4 +-
 src/gallium/drivers/r600/r600_pipe.c         |   42 +++++--------------------
 src/gallium/drivers/r600/r600_pipe.h         |    1 +
 src/gallium/drivers/r600/r600_state.c        |   13 +++-----
 src/gallium/drivers/r600/r600_state_common.c |   26 ++++++++--------
 6 files changed, 36 insertions(+), 70 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 887f52e..97f10ce 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -657,13 +657,11 @@ static void *evergreen_create_blend_state(struct 
pipe_context *ctx,
        u32 color_control, target_mask;
        /* FIXME there is more then 8 framebuffer */
        unsigned blend_cntl[8];
-       enum radeon_family family;
 
        if (blend == NULL) {
                return NULL;
        }
 
-       family = r600_get_family(rctx->radeon);
        rstate = &blend->rstate;
 
        rstate->id = R600_PIPE_STATE_BLEND;
@@ -690,7 +688,7 @@ static void *evergreen_create_blend_state(struct 
pipe_context *ctx,
        r600_pipe_state_add_reg(rstate, R_028808_CB_COLOR_CONTROL,
                                color_control, 0xFFFFFFFD, NULL);
 
-       if (family != CHIP_CAYMAN)
+       if (rctx->chip_class != CAYMAN)
                r600_pipe_state_add_reg(rstate, R_028C3C_PA_SC_AA_MASK, 
0xFFFFFFFF, 0xFFFFFFFF, NULL);
        else {
                r600_pipe_state_add_reg(rstate, 
CM_R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
@@ -827,9 +825,6 @@ static void *evergreen_create_rs_state(struct pipe_context 
*ctx,
        unsigned tmp;
        unsigned prov_vtx = 1, polygon_dual_mode;
        unsigned clip_rule;
-       enum radeon_family family;
-
-       family = r600_get_family(rctx->radeon);
 
        if (rs == NULL) {
                return NULL;
@@ -888,7 +883,7 @@ static void *evergreen_create_rs_state(struct pipe_context 
*ctx,
        tmp = (unsigned)state->line_width * 8;
        r600_pipe_state_add_reg(rstate, R_028A08_PA_SU_LINE_CNTL, 
S_028A08_WIDTH(tmp), 0xFFFFFFFF, NULL);
 
-       if (family == CHIP_CAYMAN) {
+       if (rctx->chip_class == CAYMAN) {
                r600_pipe_state_add_reg(rstate, CM_R_028BDC_PA_SC_LINE_CNTL, 
0x00000400, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, CM_R_028BE4_PA_SU_VTX_CNTL,
                                        
S_028C08_PIX_CENTER_HALF(state->gl_rasterization_rules),
@@ -1447,14 +1442,11 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state);
        u32 shader_mask, tl, br, target_mask;
-       enum radeon_family family;
        int tl_x, tl_y, br_x, br_y;
 
        if (rstate == NULL)
                return;
 
-       family = r600_get_family(rctx->radeon);
-
        evergreen_context_flush_dest_caches(&rctx->ctx);
        rctx->ctx.num_dest_buffers = state->nr_cbufs;
 
@@ -1491,7 +1483,7 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
        if (br_y == 0)
                tl_y = 1;
        /* cayman hw workaround */
-       if (family == CHIP_CAYMAN) {
+       if (rctx->chip_class == CAYMAN) {
                if (br_x == 1 && br_y == 1)
                        br_x = 2;
        }
@@ -1535,7 +1527,7 @@ static void evergreen_set_framebuffer_state(struct 
pipe_context *ctx,
                                shader_mask, 0xFFFFFFFF, NULL);
 
 
-       if (family == CHIP_CAYMAN) {
+       if (rctx->chip_class == CAYMAN) {
                r600_pipe_state_add_reg(rstate, CM_R_028BE0_PA_SC_AA_CONFIG,
                                        0x00000000, 0xFFFFFFFF, NULL);
        } else {
@@ -1722,9 +1714,9 @@ void evergreen_init_config(struct r600_pipe_context *rctx)
        enum radeon_family family;
        unsigned tmp;
 
-       family = r600_get_family(rctx->radeon);
+       family = rctx->family;
 
-       if (family == CHIP_CAYMAN) {
+       if (rctx->chip_class == CAYMAN) {
                cayman_init_config(rctx);
                return;
        }
diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 065f955..cd4984e 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -2162,7 +2162,7 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
        struct r600_bc_vtx vtx;
        struct pipe_vertex_element *elements = ve->elements;
        const struct util_format_description *desc;
-       unsigned fetch_resource_start = rctx->family >= CHIP_CEDAR ? 0 : 160;
+       unsigned fetch_resource_start = rctx->chip_class >= EVERGREEN ? 0 : 160;
        unsigned format, num_format, format_comp, endian;
        u32 *bytecode;
        int i, r;
@@ -2287,7 +2287,7 @@ int r600_vertex_elements_build_fetch_shader(struct 
r600_pipe_context *rctx, stru
        r600_bo_unmap(rctx->radeon, ve->fetch_shader);
        r600_bc_clear(&bc);
 
-       if (rctx->family >= CHIP_CEDAR)
+       if (rctx->chip_class >= EVERGREEN)
                evergreen_fetch_shader(&rctx->context, ve);
        else
                r600_fetch_shader(&rctx->context, ve);
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index d512268..a3df4f5 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -194,7 +194,6 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
 {
        struct r600_pipe_context *rctx = CALLOC_STRUCT(r600_pipe_context);
        struct r600_screen* rscreen = (struct r600_screen *)screen;
-       enum chip_class class;
 
        if (rctx == NULL)
                return NULL;
@@ -211,6 +210,7 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
        rctx->screen = rscreen;
        rctx->radeon = rscreen->radeon;
        rctx->family = r600_get_family(rctx->radeon);
+       rctx->chip_class = r600_get_family_class(rctx->radeon);
 
        rctx->fences.bo = NULL;
        rctx->fences.data = NULL;
@@ -224,47 +224,29 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
        r600_init_surface_functions(rctx);
        rctx->context.draw_vbo = r600_draw_vbo;
 
-       switch (r600_get_family(rctx->radeon)) {
-       case CHIP_R600:
-       case CHIP_RV610:
-       case CHIP_RV630:
-       case CHIP_RV670:
-       case CHIP_RV620:
-       case CHIP_RV635:
-       case CHIP_RS780:
-       case CHIP_RS880:
-       case CHIP_RV770:
-       case CHIP_RV730:
-       case CHIP_RV710:
-       case CHIP_RV740:
+       switch (rctx->chip_class) {
+       case R600:
+       case R700:
                r600_init_state_functions(rctx);
                if (r600_context_init(&rctx->ctx, rctx->radeon)) {
                        r600_destroy_context(&rctx->context);
                        return NULL;
                }
                r600_init_config(rctx);
+               rctx->custom_dsa_flush = r600_create_db_flush_dsa(rctx);
                break;
-       case CHIP_CEDAR:
-       case CHIP_REDWOOD:
-       case CHIP_JUNIPER:
-       case CHIP_CYPRESS:
-       case CHIP_HEMLOCK:
-       case CHIP_PALM:
-       case CHIP_SUMO:
-       case CHIP_SUMO2:
-       case CHIP_BARTS:
-       case CHIP_TURKS:
-       case CHIP_CAICOS:
-       case CHIP_CAYMAN:
+       case EVERGREEN:
+       case CAYMAN:
                evergreen_init_state_functions(rctx);
                if (evergreen_context_init(&rctx->ctx, rctx->radeon)) {
                        r600_destroy_context(&rctx->context);
                        return NULL;
                }
                evergreen_init_config(rctx);
+               rctx->custom_dsa_flush = evergreen_create_db_flush_dsa(rctx);
                break;
        default:
-               R600_ERR("unsupported family %d\n", 
r600_get_family(rctx->radeon));
+               R600_ERR("Unsupported chip class %d.\n", rctx->chip_class);
                r600_destroy_context(&rctx->context);
                return NULL;
        }
@@ -289,12 +271,6 @@ static struct pipe_context *r600_create_context(struct 
pipe_screen *screen, void
                return NULL;
        }
 
-       class = r600_get_family_class(rctx->radeon);
-       if (class == R600 || class == R700)
-               rctx->custom_dsa_flush = r600_create_db_flush_dsa(rctx);
-       else
-               rctx->custom_dsa_flush = evergreen_create_db_flush_dsa(rctx);
-
        return &rctx->context;
 }
 
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index b51fa24..6f399ed 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -176,6 +176,7 @@ struct r600_pipe_context {
        struct pipe_context             context;
        struct blitter_context          *blitter;
        enum radeon_family              family;
+       enum chip_class                 chip_class;
        void                            *custom_dsa_flush;
        struct r600_screen              *screen;
        struct radeon                   *radeon;
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index 3085cd9..8a684e6 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1399,7 +1399,7 @@ static void r600_cb(struct r600_pipe_context *rctx, 
struct r600_pipe_state *rsta
        /* EXPORT_NORM is an optimzation that can be enabled for better
         * performance in certain cases
         */
-       if (rctx->family < CHIP_RV770) {
+       if (rctx->chip_class == R600) {
                /* EXPORT_NORM can be enabled if:
                 * - 11-bit or smaller UNORM/SNORM/SRGB
                 * - BLEND_CLAMP is enabled
@@ -1559,7 +1559,7 @@ static void r600_set_framebuffer_state(struct 
pipe_context *ctx,
        r600_pipe_state_add_reg(rstate,
                                R_028200_PA_SC_WINDOW_OFFSET, 0x00000000,
                                0xFFFFFFFF, NULL);
-       if (rctx->family >= CHIP_RV770) {
+       if (rctx->chip_class >= R700) {
                r600_pipe_state_add_reg(rstate,
                                        R_028230_PA_SC_EDGERULE, 0xAAAAAAAA,
                                        0xFFFFFFFF, NULL);
@@ -1653,16 +1653,13 @@ void r600_init_state_functions(struct r600_pipe_context 
*rctx)
 
 void r600_adjust_gprs(struct r600_pipe_context *rctx)
 {
-       enum radeon_family family;
        struct r600_pipe_state rstate;
        unsigned num_ps_gprs = rctx->default_ps_gprs;
        unsigned num_vs_gprs = rctx->default_vs_gprs;
        unsigned tmp;
        int diff;
 
-       family = r600_get_family(rctx->radeon);
-
-       if (family >= CHIP_CEDAR)
+       if (rctx->chip_class >= EVERGREEN)
                return;
 
        if (!rctx->ps_shader && !rctx->vs_shader)
@@ -1714,7 +1711,7 @@ void r600_init_config(struct r600_pipe_context *rctx)
        struct r600_pipe_state *rstate = &rctx->config;
        u32 tmp;
 
-       family = r600_get_family(rctx->radeon);
+       family = rctx->family;
        ps_prio = 0;
        vs_prio = 1;
        gs_prio = 2;
@@ -1895,7 +1892,7 @@ void r600_init_config(struct r600_pipe_context *rctx)
        r600_pipe_state_add_reg(rstate, R_009714_VC_ENHANCE, 0x00000000, 
0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_028350_SX_MISC, 0x00000000, 
0xFFFFFFFF, NULL);
 
-       if (family >= CHIP_RV770) {
+       if (rctx->chip_class >= R700) {
                r600_pipe_state_add_reg(rstate, 
R_008D8C_SQ_DYN_GPR_CNTL_PS_FLUSH_REQ, 0x00004000, 0xFFFFFFFF, NULL);
                r600_pipe_state_add_reg(rstate, R_009508_TA_CNTL_AUX,
                                        S_009508_DISABLE_CUBE_ANISO(1) |
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index d914040..408eaed 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -109,7 +109,7 @@ void r600_bind_rs_state(struct pipe_context *ctx, void 
*state)
        rctx->states[rs->rstate.id] = &rs->rstate;
        r600_context_pipe_state_set(&rctx->ctx, &rs->rstate);
 
-       if (rctx->family >= CHIP_CEDAR) {
+       if (rctx->chip_class >= EVERGREEN) {
                evergreen_polygon_offset_update(rctx);
        } else {
                r600_polygon_offset_update(rctx);
@@ -212,7 +212,7 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, 
unsigned count,
        /* Zero states. */
        for (i = 0; i < count; i++) {
                if (!buffers[i].buffer) {
-                       if (rctx->family >= CHIP_CEDAR) {
+                       if (rctx->chip_class >= EVERGREEN) {
                                
evergreen_context_pipe_state_set_fs_resource(&rctx->ctx, NULL, i);
                        } else {
                                
r600_context_pipe_state_set_fs_resource(&rctx->ctx, NULL, i);
@@ -220,7 +220,7 @@ void r600_set_vertex_buffers(struct pipe_context *ctx, 
unsigned count,
                }
        }
        for (; i < rctx->vbuf_mgr->nr_real_vertex_buffers; i++) {
-               if (rctx->family >= CHIP_CEDAR) {
+               if (rctx->chip_class >= EVERGREEN) {
                        
evergreen_context_pipe_state_set_fs_resource(&rctx->ctx, NULL, i);
                } else {
                        r600_context_pipe_state_set_fs_resource(&rctx->ctx, 
NULL, i);
@@ -367,7 +367,7 @@ static void r600_spi_update(struct r600_pipe_context *rctx)
        for (i = 0; i < rshader->ninput; i++) {
                if (rshader->input[i].name == TGSI_SEMANTIC_POSITION ||
                    rshader->input[i].name == TGSI_SEMANTIC_FACE)
-                       if (rctx->family >= CHIP_CEDAR)
+                       if (rctx->chip_class >= EVERGREEN)
                                continue;
                        else
                                sid=0;
@@ -387,7 +387,7 @@ static void r600_spi_update(struct r600_pipe_context *rctx)
                        tmp |= S_028644_PT_SPRITE_TEX(1);
                }
 
-               if (rctx->family < CHIP_CEDAR) {
+               if (rctx->chip_class < EVERGREEN) {
                        if (rshader->input[i].centroid)
                                tmp |= S_028644_SEL_CENTROID(1);
 
@@ -434,14 +434,14 @@ void r600_set_constant_buffer(struct pipe_context *ctx, 
uint shader, uint index,
 
                rstate = &rctx->vs_const_buffer_resource[index];
                if (!rstate->id) {
-                       if (rctx->family >= CHIP_CEDAR) {
+                       if (rctx->chip_class >= EVERGREEN) {
                                evergreen_pipe_init_buffer_resource(rctx, 
rstate);
                        } else {
                                r600_pipe_init_buffer_resource(rctx, rstate);
                        }
                }
 
-               if (rctx->family >= CHIP_CEDAR) {
+               if (rctx->chip_class >= EVERGREEN) {
                        evergreen_pipe_mod_buffer_resource(rstate, &rbuffer->r, 
offset, 16);
                        
evergreen_context_pipe_state_set_vs_resource(&rctx->ctx, rstate, index);
                } else {
@@ -462,13 +462,13 @@ void r600_set_constant_buffer(struct pipe_context *ctx, 
uint shader, uint index,
 
                rstate = &rctx->ps_const_buffer_resource[index];
                if (!rstate->id) {
-                       if (rctx->family >= CHIP_CEDAR) {
+                       if (rctx->chip_class >= EVERGREEN) {
                                evergreen_pipe_init_buffer_resource(rctx, 
rstate);
                        } else {
                                r600_pipe_init_buffer_resource(rctx, rstate);
                        }
                }
-               if (rctx->family >= CHIP_CEDAR) {
+               if (rctx->chip_class >= EVERGREEN) {
                        evergreen_pipe_mod_buffer_resource(rstate, &rbuffer->r, 
offset, 16);
                        
evergreen_context_pipe_state_set_ps_resource(&rctx->ctx, rstate, index);
                } else {
@@ -521,14 +521,14 @@ static void r600_vertex_buffer_update(struct 
r600_pipe_context *rctx)
                offset += vertex_buffer->buffer_offset + 
r600_bo_offset(rbuffer->bo);
 
                if (!rstate->id) {
-                       if (rctx->family >= CHIP_CEDAR) {
+                       if (rctx->chip_class >= EVERGREEN) {
                                evergreen_pipe_init_buffer_resource(rctx, 
rstate);
                        } else {
                                r600_pipe_init_buffer_resource(rctx, rstate);
                        }
                }
 
-               if (rctx->family >= CHIP_CEDAR) {
+               if (rctx->chip_class >= EVERGREEN) {
                        evergreen_pipe_mod_buffer_resource(rstate, rbuffer, 
offset, vertex_buffer->stride);
                        
evergreen_context_pipe_state_set_fs_resource(&rctx->ctx, rstate, i);
                } else {
@@ -600,7 +600,7 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
                r600_shader_rebuild(ctx, rctx->vs_shader);
 
        if ((rctx->ps_shader->shader.clamp_color != rctx->clamp_fragment_color) 
||
-           ((rctx->family >= CHIP_CEDAR) && 
rctx->ps_shader->shader.fs_write_all &&
+           ((rctx->chip_class >= EVERGREEN) && 
rctx->ps_shader->shader.fs_write_all &&
             (rctx->ps_shader->shader.nr_cbufs != rctx->nr_cbufs)))
                r600_shader_rebuild(ctx, rctx->ps_shader);
 
@@ -655,7 +655,7 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
                rdraw.indices_bo_offset = draw.index_buffer_offset;
        }
 
-       if (rctx->family >= CHIP_CEDAR) {
+       if (rctx->chip_class >= EVERGREEN) {
                evergreen_context_draw(&rctx->ctx, &rdraw);
        } else {
                r600_context_draw(&rctx->ctx, &rdraw);

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to