- U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch
* This avoids a serious r600g bug leading to a GPU hang (bnc#951298) OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=479
This commit is contained in:
parent
bfd0da0d84
commit
0145cd2610
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 22 13:08:47 UTC 2015 - sndirsch@suse.com
|
||||||
|
|
||||||
|
- U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch
|
||||||
|
* This avoids a serious r600g bug leading to a GPU hang (bnc#951298)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Oct 20 12:27:16 UTC 2015 - sndirsch@suse.com
|
Tue Oct 20 12:27:16 UTC 2015 - sndirsch@suse.com
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ Source7: Mesa.keyring
|
|||||||
# required for building against wayland of openSUSE 13.1
|
# required for building against wayland of openSUSE 13.1
|
||||||
Patch0: n_Fixed-build-against-wayland-1.2.1.patch
|
Patch0: n_Fixed-build-against-wayland-1.2.1.patch
|
||||||
# merged, should be in the next release
|
# merged, should be in the next release
|
||||||
|
Patch1: U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch
|
||||||
Patch10: U_i965-Remove-early-release-of-DRI2-miptree.patch
|
Patch10: U_i965-Remove-early-release-of-DRI2-miptree.patch
|
||||||
# to be upstreamed
|
# to be upstreamed
|
||||||
Patch11: u_Fix-crash-in-swrast-when-setting-a-texture-for-a-pix.patch
|
Patch11: u_Fix-crash-in-swrast-when-setting-a-texture-for-a-pix.patch
|
||||||
@ -520,6 +521,7 @@ rm -rf docs/README.{VMS,WIN32,OS2}
|
|||||||
# required for building against wayland of openSUSE 13.1
|
# required for building against wayland of openSUSE 13.1
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
%endif
|
%endif
|
||||||
|
%patch1 -p1
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
### disabled, but not dropped yet; these still need investigation in
|
### disabled, but not dropped yet; these still need investigation in
|
||||||
### order to figure out whether the issue is still reproducable and
|
### order to figure out whether the issue is still reproducable and
|
||||||
|
278
U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch
Normal file
278
U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
From 814f31457e9ae83d4f1e39236f704721b279b73d Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
|
||||||
|
Date: Tue, 20 Oct 2015 18:26:02 +0200
|
||||||
|
Subject: [PATCH] gallium: add PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT
|
||||||
|
|
||||||
|
This avoids a serious r600g bug leading to a GPU hang.
|
||||||
|
The chances this bug will get fixed are pretty low now.
|
||||||
|
|
||||||
|
I deeply regret listening to others and not pushing this patch, leaving
|
||||||
|
other users with a GPU-crashing driver. Yes, it should be fixed
|
||||||
|
in the compiler and it's ugly, but users couldn't care less about that.
|
||||||
|
|
||||||
|
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86720
|
||||||
|
|
||||||
|
Cc: 11.0 10.6 <mesa-stable@lists.freedesktop.org>
|
||||||
|
Reviewed-by: Brian Paul <brianp@vmware.com>
|
||||||
|
---
|
||||||
|
src/gallium/auxiliary/gallivm/lp_bld_limits.h | 2 ++
|
||||||
|
src/gallium/auxiliary/tgsi/tgsi_exec.h | 2 ++
|
||||||
|
src/gallium/docs/source/screen.rst | 4 ++++
|
||||||
|
src/gallium/drivers/freedreno/freedreno_screen.c | 2 ++
|
||||||
|
src/gallium/drivers/i915/i915_screen.c | 2 ++
|
||||||
|
src/gallium/drivers/ilo/ilo_screen.c | 2 ++
|
||||||
|
src/gallium/drivers/nouveau/nv30/nv30_screen.c | 4 ++++
|
||||||
|
src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 ++
|
||||||
|
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 ++
|
||||||
|
src/gallium/drivers/r300/r300_screen.c | 4 ++++
|
||||||
|
src/gallium/drivers/r600/r600_pipe.c | 6 ++++++
|
||||||
|
src/gallium/drivers/radeonsi/si_pipe.c | 2 ++
|
||||||
|
src/gallium/drivers/svga/svga_screen.c | 4 ++++
|
||||||
|
src/gallium/drivers/vc4/vc4_screen.c | 2 ++
|
||||||
|
src/gallium/include/pipe/p_defines.h | 3 ++-
|
||||||
|
src/mesa/state_tracker/st_extensions.c | 3 +++
|
||||||
|
16 files changed, 45 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: mesa-11.0.3/src/gallium/auxiliary/gallivm/lp_bld_limits.h
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/auxiliary/gallivm/lp_bld_limits.h
|
||||||
|
+++ mesa-11.0.3/src/gallium/auxiliary/gallivm/lp_bld_limits.h
|
||||||
|
@@ -137,6 +137,8 @@ gallivm_get_shader_param(enum pipe_shade
|
||||||
|
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
/* if we get here, we missed a shader cap above (and should have seen
|
||||||
|
* a compiler warning.)
|
||||||
|
Index: mesa-11.0.3/src/gallium/auxiliary/tgsi/tgsi_exec.h
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/auxiliary/tgsi/tgsi_exec.h
|
||||||
|
+++ mesa-11.0.3/src/gallium/auxiliary/tgsi/tgsi_exec.h
|
||||||
|
@@ -463,6 +463,8 @@ tgsi_exec_get_shader_param(enum pipe_sha
|
||||||
|
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
/* if we get here, we missed a shader cap above (and should have seen
|
||||||
|
* a compiler warning.)
|
||||||
|
Index: mesa-11.0.3/src/gallium/docs/source/screen.rst
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/docs/source/screen.rst
|
||||||
|
+++ mesa-11.0.3/src/gallium/docs/source/screen.rst
|
||||||
|
@@ -355,6 +355,10 @@ to be 0.
|
||||||
|
are supported.
|
||||||
|
* ``PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE``: Whether the driver doesn't
|
||||||
|
ignore tgsi_declaration_range::Last for shader inputs and outputs.
|
||||||
|
+* ``PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT``: This is the maximum number
|
||||||
|
+ of iterations that loops are allowed to have to be unrolled. It is only
|
||||||
|
+ a hint to state trackers. Whether any loops will be unrolled is not
|
||||||
|
+ guaranteed.
|
||||||
|
|
||||||
|
|
||||||
|
.. _pipe_compute_cap:
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/freedreno/freedreno_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/freedreno/freedreno_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/freedreno/freedreno_screen.c
|
||||||
|
@@ -407,6 +407,8 @@ fd_screen_get_shader_param(struct pipe_s
|
||||||
|
return 16;
|
||||||
|
case PIPE_SHADER_CAP_PREFERRED_IR:
|
||||||
|
return PIPE_SHADER_IR_TGSI;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
debug_printf("unknown shader param %d\n", param);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/i915/i915_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/i915/i915_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/i915/i915_screen.c
|
||||||
|
@@ -167,6 +167,8 @@ i915_get_shader_param(struct pipe_screen
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/ilo/ilo_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/ilo/ilo_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/ilo/ilo_screen.c
|
||||||
|
@@ -138,6 +138,8 @@ ilo_get_shader_param(struct pipe_screen
|
||||||
|
return PIPE_SHADER_IR_TGSI;
|
||||||
|
case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
|
||||||
|
return 1;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/nouveau/nv30/nv30_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/nouveau/nv30/nv30_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/nouveau/nv30/nv30_screen.c
|
||||||
|
@@ -261,6 +261,8 @@ nv30_screen_get_shader_param(struct pipe
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
debug_printf("unknown vertex shader param %d\n", param);
|
||||||
|
return 0;
|
||||||
|
@@ -302,6 +304,8 @@ nv30_screen_get_shader_param(struct pipe
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
debug_printf("unknown fragment shader param %d\n", param);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/nouveau/nv50/nv50_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/nouveau/nv50/nv50_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/nouveau/nv50/nv50_screen.c
|
||||||
|
@@ -297,6 +297,8 @@ nv50_screen_get_shader_param(struct pipe
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||||
|
@@ -310,6 +310,8 @@ nvc0_screen_get_shader_param(struct pipe
|
||||||
|
return 16; /* would be 32 in linked (OpenGL-style) mode */
|
||||||
|
case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
|
||||||
|
return 16; /* XXX not sure if more are really safe */
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/r300/r300_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/r300/r300_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/r300/r300_screen.c
|
||||||
|
@@ -300,6 +300,8 @@ static int r300_get_shader_param(struct
|
||||||
|
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
case PIPE_SHADER_CAP_PREFERRED_IR:
|
||||||
|
return PIPE_SHADER_IR_TGSI;
|
||||||
|
}
|
||||||
|
@@ -356,6 +358,8 @@ static int r300_get_shader_param(struct
|
||||||
|
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
case PIPE_SHADER_CAP_PREFERRED_IR:
|
||||||
|
return PIPE_SHADER_IR_TGSI;
|
||||||
|
}
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/r600/r600_pipe.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/r600/r600_pipe.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/r600/r600_pipe.c
|
||||||
|
@@ -504,6 +504,12 @@ static int r600_get_shader_param(struct
|
||||||
|
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ /* due to a bug in the shader compiler, some loops hang
|
||||||
|
+ * if they are not unrolled, see:
|
||||||
|
+ * https://bugs.freedesktop.org/show_bug.cgi?id=86720
|
||||||
|
+ */
|
||||||
|
+ return 255;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/radeonsi/si_pipe.c
|
||||||
|
@@ -489,6 +489,8 @@ static int si_get_shader_param(struct pi
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 1;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/svga/svga_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/svga/svga_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/svga/svga_screen.c
|
||||||
|
@@ -383,6 +383,8 @@ static int svga_get_shader_param(struct
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
/* If we get here, we failed to handle a cap above */
|
||||||
|
debug_printf("Unexpected fragment shader query %u\n", param);
|
||||||
|
@@ -441,6 +443,8 @@ static int svga_get_shader_param(struct
|
||||||
|
case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
|
||||||
|
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
|
||||||
|
return 0;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
}
|
||||||
|
/* If we get here, we failed to handle a cap above */
|
||||||
|
debug_printf("Unexpected vertex shader query %u\n", param);
|
||||||
|
Index: mesa-11.0.3/src/gallium/drivers/vc4/vc4_screen.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/drivers/vc4/vc4_screen.c
|
||||||
|
+++ mesa-11.0.3/src/gallium/drivers/vc4/vc4_screen.c
|
||||||
|
@@ -334,6 +334,8 @@ vc4_screen_get_shader_param(struct pipe_
|
||||||
|
return VC4_MAX_TEXTURE_SAMPLERS;
|
||||||
|
case PIPE_SHADER_CAP_PREFERRED_IR:
|
||||||
|
return PIPE_SHADER_IR_TGSI;
|
||||||
|
+ case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
|
||||||
|
+ return 32;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "unknown shader param %d\n", param);
|
||||||
|
return 0;
|
||||||
|
Index: mesa-11.0.3/src/gallium/include/pipe/p_defines.h
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/gallium/include/pipe/p_defines.h
|
||||||
|
+++ mesa-11.0.3/src/gallium/include/pipe/p_defines.h
|
||||||
|
@@ -674,7 +674,8 @@ enum pipe_shader_cap
|
||||||
|
PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED, /* all rounding modes */
|
||||||
|
PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED,
|
||||||
|
PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED,
|
||||||
|
- PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE
|
||||||
|
+ PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE,
|
||||||
|
+ PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Index: mesa-11.0.3/src/mesa/state_tracker/st_extensions.c
|
||||||
|
===================================================================
|
||||||
|
--- mesa-11.0.3.orig/src/mesa/state_tracker/st_extensions.c
|
||||||
|
+++ mesa-11.0.3/src/mesa/state_tracker/st_extensions.c
|
||||||
|
@@ -249,6 +249,9 @@ void st_init_limits(struct pipe_screen *
|
||||||
|
|
||||||
|
if (options->EmitNoLoops)
|
||||||
|
options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
|
||||||
|
+ else
|
||||||
|
+ options->MaxUnrollIterations = screen->get_shader_param(screen, sh,
|
||||||
|
+ PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT);
|
||||||
|
|
||||||
|
options->LowerClipDistance = true;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user