mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-04-17 03:32:39 +02:00
main/mesa: use fix that is submitted upstream
Reduce stack usage instead of increase thread stack size. From upstream: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10988
This commit is contained in:
parent
6157b11983
commit
62bf779680
@ -1,7 +1,7 @@
|
||||
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
||||
pkgname=mesa
|
||||
pkgver=24.1.0
|
||||
pkgrel=1
|
||||
pkgrel=2
|
||||
pkgdesc="Mesa DRI OpenGL library"
|
||||
url="https://www.mesa3d.org"
|
||||
arch="all"
|
||||
@ -67,7 +67,7 @@ makedepends="
|
||||
source="
|
||||
https://mesa.freedesktop.org/archive/mesa-${pkgver/_/-}.tar.xz
|
||||
no-unlink-megadrivers.patch
|
||||
musl-stacksize.patch
|
||||
musl-fix-stack-overflow.patch
|
||||
"
|
||||
replaces="mesa-dricore"
|
||||
options="!check" # we skip tests intentionally
|
||||
@ -374,5 +374,5 @@ _vulkan_layers() {
|
||||
sha512sums="
|
||||
4b7ed1940fc812ef4efb55978d3ffe3d0e2ae53d5b57a3baca10a52db2ba5852c5ee7e75c3739bd8d384c80bf1cba970a384250050f01f03bba98f255e12cec5 mesa-24.1.0.tar.xz
|
||||
e3d39d61b14188cd5a22e19e8c065650995f85943e6c42ec5775db5b76a9ebe8913253a8b9ac32056ac13a2c357cd951f867ecb39976c52f7d014dcc1a2d87dc no-unlink-megadrivers.patch
|
||||
f713a65063d32d4bc81d88f95ee1aa0acf9f3d2d6a1cc0a90888c74d566688247d123f5195a5ad1d26317ef042e4b4471b5ad92fcf284ba4653794b6ff2cf7e8 musl-stacksize.patch
|
||||
2a8b0d3288359d698707b2e504305c39de2ce510ec79a32b6493d6f446085dc0079ae9f6fea1aa1809481d45cb96a21414c23d638c89d1ad40f1c9b11a623dea musl-fix-stack-overflow.patch
|
||||
"
|
||||
|
||||
147
main/mesa/musl-fix-stack-overflow.patch
Normal file
147
main/mesa/musl-fix-stack-overflow.patch
Normal file
@ -0,0 +1,147 @@
|
||||
Upstream: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10988
|
||||
|
||||
From 4692869492255f199163bda26876174ea54a2861 Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Fri, 24 May 2024 11:56:46 +0200
|
||||
Subject: [PATCH] nir/opt_varyings: reduce stack usage
|
||||
|
||||
Avoid put a huge struct on stack to fix a stack overflow on musl libc.
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10988
|
||||
Fixes: commit c66967b5cb7a (nir: add nir_opt_varyings, new pass optimizing and compacting varyings)
|
||||
---
|
||||
src/compiler/nir/nir_opt_varyings.c | 52 ++++++++++++++++-------------
|
||||
1 file changed, 29 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/compiler/nir/nir_opt_varyings.c b/src/compiler/nir/nir_opt_varyings.c
|
||||
index c32cda66c93c4..0aded7fbc7201 100644
|
||||
--- a/src/compiler/nir/nir_opt_varyings.c
|
||||
+++ b/src/compiler/nir/nir_opt_varyings.c
|
||||
@@ -485,6 +485,7 @@
|
||||
#include "nir.h"
|
||||
#include "nir_builder.h"
|
||||
#include "util/u_math.h"
|
||||
+#include "util/u_memory.h"
|
||||
|
||||
/* nir_opt_varyings works at scalar 16-bit granularity across all varyings.
|
||||
*
|
||||
@@ -4205,11 +4206,12 @@ free_linkage(struct linkage_info *linkage)
|
||||
static void
|
||||
print_shader_linkage(nir_shader *producer, nir_shader *consumer)
|
||||
{
|
||||
- struct linkage_info linkage;
|
||||
+ struct linkage_info *linkage = MALLOC_STRUCT(linkage_info);
|
||||
|
||||
- init_linkage(producer, consumer, false, 0, 0, &linkage);
|
||||
- print_linkage(&linkage);
|
||||
- free_linkage(&linkage);
|
||||
+ init_linkage(producer, consumer, false, 0, 0, linkage);
|
||||
+ print_linkage(linkage);
|
||||
+ free_linkage(linkage);
|
||||
+ FREE(linkage);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4226,6 +4228,11 @@ nir_opt_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
||||
if (producer->info.stage == MESA_SHADER_TASK)
|
||||
return 0;
|
||||
|
||||
+ nir_opt_varyings_progress progress = 0;
|
||||
+ struct linkage_info *linkage = MALLOC_STRUCT(linkage_info);
|
||||
+ if (linkage == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
/* Producers before a fragment shader must have up-to-date vertex
|
||||
* divergence information.
|
||||
*/
|
||||
@@ -4235,19 +4242,17 @@ nir_opt_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
||||
nir_vertex_divergence_analysis(producer);
|
||||
}
|
||||
|
||||
- nir_opt_varyings_progress progress = 0;
|
||||
- struct linkage_info linkage;
|
||||
init_linkage(producer, consumer, spirv, max_uniform_components,
|
||||
- max_ubos_per_stage, &linkage);
|
||||
+ max_ubos_per_stage, linkage);
|
||||
|
||||
/* Part 1: Run optimizations that only remove varyings. (they can move
|
||||
* instructions between shaders)
|
||||
*/
|
||||
- remove_dead_varyings(&linkage, &progress);
|
||||
- propagate_uniform_expressions(&linkage, &progress);
|
||||
+ remove_dead_varyings(linkage, &progress);
|
||||
+ propagate_uniform_expressions(linkage, &progress);
|
||||
|
||||
/* Part 2: Deduplicate outputs. */
|
||||
- deduplicate_outputs(&linkage, &progress);
|
||||
+ deduplicate_outputs(linkage, &progress);
|
||||
|
||||
/* Run CSE on the consumer after output deduplication because duplicated
|
||||
* loads can prevent finding the post-dominator for inter-shader code
|
||||
@@ -4256,17 +4261,17 @@ nir_opt_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
||||
NIR_PASS(_, consumer, nir_opt_cse);
|
||||
|
||||
/* Re-gather linkage info after CSE. */
|
||||
- free_linkage(&linkage);
|
||||
+ free_linkage(linkage);
|
||||
init_linkage(producer, consumer, spirv, max_uniform_components,
|
||||
- max_ubos_per_stage, &linkage);
|
||||
+ max_ubos_per_stage, linkage);
|
||||
/* This must be done again to clean up bitmasks in linkage. */
|
||||
- remove_dead_varyings(&linkage, &progress);
|
||||
+ remove_dead_varyings(linkage, &progress);
|
||||
|
||||
/* This must be done after deduplication and before inter-shader code
|
||||
* motion.
|
||||
*/
|
||||
- tidy_up_convergent_varyings(&linkage);
|
||||
- find_open_coded_tes_input_interpolation(&linkage);
|
||||
+ tidy_up_convergent_varyings(linkage);
|
||||
+ find_open_coded_tes_input_interpolation(linkage);
|
||||
|
||||
/* Part 3: Run optimizations that completely change varyings. */
|
||||
#if PRINT
|
||||
@@ -4278,31 +4283,32 @@ nir_opt_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
||||
puts("");
|
||||
#endif
|
||||
|
||||
- while (backward_inter_shader_code_motion(&linkage, &progress)) {
|
||||
+ while (backward_inter_shader_code_motion(linkage, &progress)) {
|
||||
#if PRINT
|
||||
i++;
|
||||
printf("Finished: %i\n", i);
|
||||
- nir_print_shader(linkage.producer_builder.shader, stdout);
|
||||
- nir_print_shader(linkage.consumer_builder.shader, stdout);
|
||||
- print_linkage(&linkage);
|
||||
+ nir_print_shader(linkage->producer_builder.shader, stdout);
|
||||
+ nir_print_shader(linkage->consumer_builder.shader, stdout);
|
||||
+ print_linkage(linkage);
|
||||
puts("");
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Part 4: Do compaction. */
|
||||
- compact_varyings(&linkage, &progress);
|
||||
+ compact_varyings(linkage, &progress);
|
||||
|
||||
- nir_metadata_preserve(linkage.producer_builder.impl,
|
||||
+ nir_metadata_preserve(linkage->producer_builder.impl,
|
||||
progress & nir_progress_producer ?
|
||||
(nir_metadata_block_index |
|
||||
nir_metadata_dominance) :
|
||||
nir_metadata_all);
|
||||
- nir_metadata_preserve(linkage.consumer_builder.impl,
|
||||
+ nir_metadata_preserve(linkage->consumer_builder.impl,
|
||||
progress & nir_progress_consumer ?
|
||||
(nir_metadata_block_index |
|
||||
nir_metadata_dominance) :
|
||||
nir_metadata_all);
|
||||
- free_linkage(&linkage);
|
||||
+ free_linkage(linkage);
|
||||
+ FREE(linkage);
|
||||
|
||||
if (progress & nir_progress_producer)
|
||||
nir_validate_shader(producer, "nir_opt_varyings");
|
||||
--
|
||||
GitLab
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
Patch-Source: https://github.com/chimera-linux/cports/blob/b588dab4f47fe729000626d5878ce59c208e7ed8/main/mesa/patches/musl-stacksize.patch
|
||||
--- a/src/c11/impl/threads_posix.c
|
||||
+++ b/src/c11/impl/threads_posix.c
|
||||
@@ -255,15 +255,29 @@ static inline int
|
||||
thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
|
||||
{
|
||||
struct impl_thrd_param *pack;
|
||||
+#ifdef __GLIBC__
|
||||
+ pthread_attr_t *attrp = NULL;
|
||||
+#else
|
||||
+ pthread_attr_t attr = { 0 };
|
||||
+ pthread_attr_init(&attr);
|
||||
+ pthread_attr_setstacksize(&attr, 8388608);
|
||||
+ pthread_attr_t *attrp = &attr;
|
||||
+#endif
|
||||
assert(thr != NULL);
|
||||
pack = (struct impl_thrd_param *)malloc(sizeof(struct impl_thrd_param));
|
||||
if (!pack) return thrd_nomem;
|
||||
pack->func = func;
|
||||
pack->arg = arg;
|
||||
- if (pthread_create(thr, NULL, impl_thrd_routine, pack) != 0) {
|
||||
+ if (pthread_create(thr, attrp, impl_thrd_routine, pack) != 0) {
|
||||
+#ifndef __GLIBC__
|
||||
+ pthread_attr_destroy(&attr);
|
||||
+#endif
|
||||
free(pack);
|
||||
return thrd_error;
|
||||
}
|
||||
+#ifndef __GLIBC__
|
||||
+ pthread_attr_destroy(&attr);
|
||||
+#endif
|
||||
return thrd_success;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user