---
 src/gallium/drivers/r600/r600_pipe.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index a59578d..1698cb3 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -640,6 +640,8 @@ static float r600_get_paramf(struct pipe_screen* pscreen,
 
 static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, 
enum pipe_shader_cap param)
 {
+       struct r600_screen *rscreen = (struct r600_screen *)pscreen;
+
        switch(shader)
        {
        case PIPE_SHADER_FRAGMENT:
@@ -654,7 +656,6 @@ static int r600_get_shader_param(struct pipe_screen* 
pscreen, unsigned shader, e
                return 0;
        }
 
-       /* XXX: all these should be fixed, since r600 surely supports much 
more! */
        switch (param) {
        case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
        case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
@@ -662,7 +663,11 @@ static int r600_get_shader_param(struct pipe_screen* 
pscreen, unsigned shader, e
        case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
                return 16384;
        case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
-               return 8; /* XXX */
+               /* There is a bug on certain Evergreen cards which limits
+                * the control flow depth. */
+               return rscreen->chip_class == EVERGREEN &&
+                      rscreen->family != CHIP_CYPRESS &&
+                      rscreen->family != CHIP_HEMLOCK ? 3 : 32;
        case PIPE_SHADER_CAP_MAX_INPUTS:
                return 32;
        case PIPE_SHADER_CAP_MAX_TEMPS:
-- 
1.7.10.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to