Mesa (nvfx-next-7k): mesa/st: turn on EmitNoIfs is control flow unsupported
Luca Barbieri
lb at kemper.freedesktop.org
Fri Aug 20 17:48:42 UTC 2010
Module: Mesa
Branch: nvfx-next-7k
Commit: 765c053a47dbf84b7fe3e689448870597e9d3e1d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=765c053a47dbf84b7fe3e689448870597e9d3e1d
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/nvfx/nvfx_screen.c | 6 +++---
src/gallium/drivers/r300/r300_screen.c | 6 ++++--
src/mesa/state_tracker/st_extensions.c | 5 +++++
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/gallium/drivers/nvfx/nvfx_screen.c b/src/gallium/drivers/nvfx/nvfx_screen.c
index 72cb523..1dd7b48 100644
--- a/src/gallium/drivers/nvfx/nvfx_screen.c
+++ b/src/gallium/drivers/nvfx/nvfx_screen.c
@@ -99,7 +99,7 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_FS_CONTROL_FLOW_DEPTH:
/* FIXME: is it the dynamic (nv30:0/nv40:24) or the static
value (nv30:0/nv40:4) ? */
- return screen->is_nv4x ? 4 : 0;
+ return 0; //screen->is_nv4x ? 4 : 0;
case PIPE_CAP_MAX_FS_INPUTS:
return 10;
case PIPE_CAP_MAX_FS_CONSTS:
@@ -119,7 +119,7 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_VS_CONTROL_FLOW_DEPTH:
/* FIXME: is it the dynamic (nv30:24/nv40:24) or the static
value (nv30:1/nv40:4) ? */
- return screen->is_nv4x ? 4 : 1;
+ return 0; //return screen->is_nv4x ? 4 : 1;
case PIPE_CAP_MAX_VS_INPUTS:
return 16;
case PIPE_CAP_MAX_VS_CONSTS:
@@ -155,7 +155,7 @@ nvfx_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
return screen->is_nv4x ? 16.0 : 8.0;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
- return screen->is_nv4x ? 16.0 : 4.0;
+ return 15.0;
default:
NOUVEAU_ERR("Unknown PIPE_CAP %d\n", param);
return 0.0;
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