Module: Mesa Branch: nvfx-no-ifs-attempt Commit: 30b8e296ebbae7ce94e03b219f07dd1227c0cd41 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=30b8e296ebbae7ce94e03b219f07dd1227c0cd41
Author: Luca Barbieri <[email protected]> Date: Thu Aug 19 23:48:54 2010 +0200 mesa/st: turn on EmitNoIfs is control flow unsupported r300g is changed to falsely claim it always has control flow to not change its behavior. --- src/gallium/drivers/r300/r300_screen.c | 6 ++++-- src/mesa/state_tracker/st_extensions.c | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 1e4edcd..66f426c 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -169,7 +169,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_MAX_FS_TEX_INDIRECTIONS: return is_r500 ? 511 : 4; case PIPE_CAP_MAX_FS_CONTROL_FLOW_DEPTH: - return is_r500 ? 64 : 0; /* Actually unlimited on r500. */ + /* it is actually 0, but we for now don't enable the GLSL2 if-to-cond pass */ + return is_r500 ? 64 : 1; /* Actually unlimited on r500. */ case PIPE_CAP_MAX_FS_INPUTS: /* 2 colors + 8 texcoords are always supported * (minus fog and wpos). @@ -195,7 +196,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_MAX_VS_TEX_INDIRECTIONS: return 0; case PIPE_CAP_MAX_VS_CONTROL_FLOW_DEPTH: - return is_r500 ? 4 : 0; /* For loops; not sure about conditionals. */ + /* it is actually 0, but we for now don't enable the GLSL2 if-to-cond pass */ + return is_r500 ? 4 : 1; /* For loops; not sure about conditionals. */ case PIPE_CAP_MAX_VS_INPUTS: return 16; case PIPE_CAP_MAX_VS_CONSTS: diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 90e7867..72c457b 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -139,6 +139,11 @@ void st_init_limits(struct st_context *st) st->ctx->Shader.EmitContReturn = screen->get_param(screen, PIPE_CAP_TGSI_CONT_SUPPORTED); + /* XXX this should differ for VS and FS! */ + st->ctx->Shader.EmitNoIfs = + !screen->get_param(screen, PIPE_CAP_MAX_VS_CONTROL_FLOW_DEPTH) + || !screen->get_param(screen, PIPE_CAP_MAX_FS_CONTROL_FLOW_DEPTH); + /* Quads always follow GL provoking rules. */ c->QuadsFollowProvokingVertexConvention = GL_FALSE; _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
