Mesa (nvfx-no-ifs-attempt): mesa/st: turn on EmitNoIfs is control flow unsupported
Luca Barbieri
lb at kemper.freedesktop.org
Sat Aug 21 20:45:46 UTC 2010
Module: Mesa
Branch: nvfx-no-ifs-attempt
Commit: 30b8e296ebbae7ce94e03b219f07dd1227c0cd41
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=30b8e296ebbae7ce94e03b219f07dd1227c0cd41
Author: Luca Barbieri <luca at luca-barbieri.com>
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;
More information about the mesa-commit
mailing list