From 813de84f322ef35ff1f73050110ce4f7c4636c52afb2c45f2ce96d8978f9e09e Mon Sep 17 00:00:00 2001 From: Michal Srb Date: Wed, 7 Feb 2018 08:22:29 +0000 Subject: [PATCH] Accepting request 573594 from home:michalsrb:branches:bnc1079465:X11:XOrg - u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch * Fix crash when loading shader. (bnc#1079465) OBS-URL: https://build.opensuse.org/request/show/573594 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=696 --- Mesa-drivers.changes | 6 ++ Mesa-drivers.spec | 2 + Mesa.changes | 6 ++ Mesa.spec | 2 + ...restore-num_tgsi_tokens-when-loading.patch | 101 ++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch diff --git a/Mesa-drivers.changes b/Mesa-drivers.changes index 1386186..f67fe0e 100644 --- a/Mesa-drivers.changes +++ b/Mesa-drivers.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Feb 6 08:42:03 UTC 2018 - msrb@suse.com + +- u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch + * Fix crash when loading shader. (bnc#1079465) + ------------------------------------------------------------------- Fri Feb 2 13:52:41 UTC 2018 - sndirsch@suse.com diff --git a/Mesa-drivers.spec b/Mesa-drivers.spec index 2cfd251..5117d0b 100644 --- a/Mesa-drivers.spec +++ b/Mesa-drivers.spec @@ -141,6 +141,7 @@ Patch31: archlinux_0001-Fix-linkage-against-shared-glapi.patch Patch32: archlinux_glvnd-fix-gl-dot-pc.patch # Upstream Patch43: u_mesa-python3-only.patch +Patch44: u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch Patch45: n_Disable-AMDGPU-GFX9-Vega-on-LLVM-lessthan-6.0.0.patch BuildRequires: autoconf >= 2.60 @@ -749,6 +750,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %endif %patch43 -p1 +%patch44 -p1 %patch45 -p1 # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when diff --git a/Mesa.changes b/Mesa.changes index 1386186..f67fe0e 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Feb 6 08:42:03 UTC 2018 - msrb@suse.com + +- u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch + * Fix crash when loading shader. (bnc#1079465) + ------------------------------------------------------------------- Fri Feb 2 13:52:41 UTC 2018 - sndirsch@suse.com diff --git a/Mesa.spec b/Mesa.spec index 62cf8e6..6e37cc0 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -140,6 +140,7 @@ Patch31: archlinux_0001-Fix-linkage-against-shared-glapi.patch Patch32: archlinux_glvnd-fix-gl-dot-pc.patch # Upstream Patch43: u_mesa-python3-only.patch +Patch44: u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch Patch45: n_Disable-AMDGPU-GFX9-Vega-on-LLVM-lessthan-6.0.0.patch BuildRequires: autoconf >= 2.60 @@ -748,6 +749,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %endif %patch43 -p1 +%patch44 -p1 %patch45 -p1 # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when diff --git a/u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch b/u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch new file mode 100644 index 0000000..7a6858c --- /dev/null +++ b/u_mesa-st-shader_cache-restore-num_tgsi_tokens-when-loading.patch @@ -0,0 +1,101 @@ +Git-commit: 041b18cf23a0acf7b0eddf63cd7a2a10192432a1 +Author: Timothy Arceri +Subject: st/shader_cache: restore num_tgsi_tokens when loading from cache +References: bnc#1079465 fdo#104762 +Patch-Mainline: Upstream +Signed-off-by: Michal Srb + +Without this we will fail to correctly serialise programs when +using glGetProgramBinary() if the program was retrieved from +the disk cache rather than freshly compiled. + +Fixes: c69b0dd6817b "st/glsl_to_tgsi: store num_tgsi_tokens in st_*_program" + +Reviewed-by: Gert Wollny +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104762 +--- + src/mesa/state_tracker/st_shader_cache.c | 25 ++++++++++++++++--------- + 1 file changed, 16 insertions(+), 9 deletions(-) + +diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c +index b1b9d275f8..12d73965bf 100644 +--- a/src/mesa/state_tracker/st_shader_cache.c ++++ b/src/mesa/state_tracker/st_shader_cache.c +@@ -142,10 +142,11 @@ read_stream_out_from_cache(struct blob_reader *blob_reader, + + static void + read_tgsi_from_cache(struct blob_reader *blob_reader, +- const struct tgsi_token **tokens) ++ const struct tgsi_token **tokens, ++ unsigned *num_tokens) + { +- uint32_t num_tokens = blob_read_uint32(blob_reader); +- unsigned tokens_size = num_tokens * sizeof(struct tgsi_token); ++ *num_tokens = blob_read_uint32(blob_reader); ++ unsigned tokens_size = *num_tokens * sizeof(struct tgsi_token); + *tokens = (const struct tgsi_token*) MALLOC(tokens_size); + blob_copy_bytes(blob_reader, (uint8_t *) *tokens, tokens_size); + } +@@ -175,7 +176,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + sizeof(stvp->result_to_output)); + + read_stream_out_from_cache(&blob_reader, &stvp->tgsi); +- read_tgsi_from_cache(&blob_reader, &stvp->tgsi.tokens); ++ read_tgsi_from_cache(&blob_reader, &stvp->tgsi.tokens, ++ &stvp->num_tgsi_tokens); + + if (st->vp == stvp) + st->dirty |= ST_NEW_VERTEX_PROGRAM(st, stvp); +@@ -189,7 +191,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + &sttcp->variants, &sttcp->tgsi); + + read_stream_out_from_cache(&blob_reader, &sttcp->tgsi); +- read_tgsi_from_cache(&blob_reader, &sttcp->tgsi.tokens); ++ read_tgsi_from_cache(&blob_reader, &sttcp->tgsi.tokens, ++ &sttcp->num_tgsi_tokens); + + if (st->tcp == sttcp) + st->dirty |= sttcp->affected_states; +@@ -203,7 +206,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + &sttep->variants, &sttep->tgsi); + + read_stream_out_from_cache(&blob_reader, &sttep->tgsi); +- read_tgsi_from_cache(&blob_reader, &sttep->tgsi.tokens); ++ read_tgsi_from_cache(&blob_reader, &sttep->tgsi.tokens, ++ &sttep->num_tgsi_tokens); + + if (st->tep == sttep) + st->dirty |= sttep->affected_states; +@@ -217,7 +221,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + &stgp->tgsi); + + read_stream_out_from_cache(&blob_reader, &stgp->tgsi); +- read_tgsi_from_cache(&blob_reader, &stgp->tgsi.tokens); ++ read_tgsi_from_cache(&blob_reader, &stgp->tgsi.tokens, ++ &stgp->num_tgsi_tokens); + + if (st->gp == stgp) + st->dirty |= stgp->affected_states; +@@ -229,7 +234,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + + st_release_fp_variants(st, stfp); + +- read_tgsi_from_cache(&blob_reader, &stfp->tgsi.tokens); ++ read_tgsi_from_cache(&blob_reader, &stfp->tgsi.tokens, ++ &stfp->num_tgsi_tokens); + + if (st->fp == stfp) + st->dirty |= stfp->affected_states; +@@ -242,7 +248,8 @@ st_deserialise_tgsi_program(struct gl_context *ctx, + st_release_cp_variants(st, stcp); + + read_tgsi_from_cache(&blob_reader, +- (const struct tgsi_token**) &stcp->tgsi.prog); ++ (const struct tgsi_token**) &stcp->tgsi.prog, ++ &stcp->num_tgsi_tokens); + + stcp->tgsi.req_local_mem = stcp->Base.info.cs.shared_size; + stcp->tgsi.req_private_mem = 0; +-- +2.13.6 +