From afce47fb0b489c248ebeb3660c30660ae900b967 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 24 Jan 2014 17:14:26 +1000 Subject: r600g: calculate correct cut value This selects the cut value depending on the shader selected. Signed-off-by: Dave Airlie Reviewed-by: Alex Deucher --- src/gallium/drivers/r600/evergreen_state.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 2828a750783..e23f434e671 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -2728,12 +2728,22 @@ static void evergreen_emit_shader_stages(struct r600_context *rctx, struct r600_ uint32_t v = 0, v2 = 0, primid = 0; if (state->geom_enable) { + uint32_t cut_val; + + if (rctx->gs_shader->current->shader.gs_max_out_vertices <= 128) + cut_val = V_028A40_GS_CUT_128; + else if (rctx->gs_shader->current->shader.gs_max_out_vertices <= 256) + cut_val = V_028A40_GS_CUT_256; + else if (rctx->gs_shader->current->shader.gs_max_out_vertices <= 512) + cut_val = V_028A40_GS_CUT_512; + else + cut_val = V_028A40_GS_CUT_1024; v = S_028B54_ES_EN(V_028B54_ES_STAGE_REAL) | S_028B54_GS_EN(1) | S_028B54_VS_EN(V_028B54_VS_STAGE_COPY_SHADER); v2 = S_028A40_MODE(V_028A40_GS_SCENARIO_G) | - S_028A40_CUT_MODE(V_028A40_GS_CUT_128); + S_028A40_CUT_MODE(cut_val); if (rctx->gs_shader->current->shader.gs_prim_id_input) primid = 1; -- cgit v1.2.3