diff --git a/Mesa.changes b/Mesa.changes index c2ea2e5..a21f361 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +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 + +- Update to 11.0.3 + * bug fix release which fixes bugs found since the 11.0.2 release + ------------------------------------------------------------------- Thu Oct 1 12:47:05 UTC 2015 - sndirsch@suse.com diff --git a/Mesa.spec b/Mesa.spec index 8ddea7d..36074f5 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -18,7 +18,7 @@ %define glamor 1 %define _name_archive mesa -%define _version 11.0.2 +%define _version 11.0.3 %ifarch %ix86 x86_64 %arm ppc ppc64 ppc64le s390x %define gallium_loader 1 %else @@ -37,7 +37,7 @@ %define with_nine 1 %endif Name: Mesa -Version: 11.0.2 +Version: 11.0.3 Release: 0 Summary: System for rendering interactive 3-D graphics License: MIT @@ -53,6 +53,7 @@ Source7: Mesa.keyring # required for building against wayland of openSUSE 13.1 Patch0: n_Fixed-build-against-wayland-1.2.1.patch # 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 # to be upstreamed 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 %patch0 -p1 %endif +%patch1 -p1 %patch10 -p1 ### disabled, but not dropped yet; these still need investigation in ### order to figure out whether the issue is still reproducable and diff --git a/U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch b/U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch new file mode 100644 index 0000000..1db879b --- /dev/null +++ b/U_gallium-add-PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HI.patch @@ -0,0 +1,278 @@ +From 814f31457e9ae83d4f1e39236f704721b279b73d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= +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 +Reviewed-by: Brian Paul +--- + 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; + } diff --git a/mesa-11.0.2.tar.xz b/mesa-11.0.2.tar.xz deleted file mode 100644 index 7335853..0000000 --- a/mesa-11.0.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fce11fb27eb87adf1e620a76455d635c6136dfa49ae58c53b34ef8d0c7b7eae4 -size 7263112 diff --git a/mesa-11.0.2.tar.xz.sig b/mesa-11.0.2.tar.xz.sig deleted file mode 100644 index 18a0c9e..0000000 Binary files a/mesa-11.0.2.tar.xz.sig and /dev/null differ diff --git a/mesa-11.0.3.tar.xz b/mesa-11.0.3.tar.xz new file mode 100644 index 0000000..e792d89 --- /dev/null +++ b/mesa-11.0.3.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab2992eece21adc23c398720ef8c6933cb69ea42e1b2611dc09d031e17e033d6 +size 7264824 diff --git a/mesa-11.0.3.tar.xz.sig b/mesa-11.0.3.tar.xz.sig new file mode 100644 index 0000000..8c5e65c Binary files /dev/null and b/mesa-11.0.3.tar.xz.sig differ