- update to 22.2.0

* AMD RDNA3 Prep, Intel Arc Graphics, Many Vulkan Improvements;
    more details on Phoronix:
    https://www.phoronix.com/news/Mesa-22.2-Released
- supersedes llvm15.patch

OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1137
This commit is contained in:
Stefan Dirsch 2022-09-22 10:02:02 +00:00 committed by Git OBS Bridge
parent c53cdf13bb
commit cecf3c8c3f
7 changed files with 14 additions and 381 deletions

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Wed Sep 21 14:20:04 UTC 2022 - Stefan Dirsch <sndirsch@suse.com>
- update to 22.2.0
* AMD RDNA3 Prep, Intel Arc Graphics, Many Vulkan Improvements;
more details on Phoronix:
https://www.phoronix.com/news/Mesa-22.2-Released
- supersedes llvm15.patch
-------------------------------------------------------------------
Wed Sep 14 13:45:41 UTC 2022 - Andreas Schwab <schwab@suse.de>

View File

@ -33,7 +33,7 @@
%define glamor 1
%define _name_archive mesa
%define _version 22.1.7
%define _version 22.2.0
%define with_opencl 0
%define with_vulkan 0
%define with_llvm 0
@ -106,7 +106,7 @@
%endif
Name: Mesa%{psuffix}
Version: 22.1.7
Version: 22.2.0
Release: 0
Summary: System for rendering 3-D graphics
License: MIT
@ -129,7 +129,6 @@ Patch200: u_fix-build-on-ppc64le.patch
Patch300: n_buildfix-21.3.0.patch
Patch400: n_no-sse2-on-ix86-except-for-intel-drivers.patch
Patch500: n_stop-iris-flicker.patch
Patch1500: llvm15.patch
%ifarch %{ix86} x86_64
BuildRequires: DirectX-Headers
%endif
@ -753,7 +752,6 @@ rm -rf docs/README.{VMS,WIN32,OS2}
%patch400 -p1
%endif
%patch500 -p1
%patch1500 -p1
# Remove requires to vulkan libs from baselibs.conf on platforms
# where vulkan build is disabled; ugly ...

View File

@ -1,374 +0,0 @@
Index: mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld.h
===================================================================
--- mesa-22.1.7.orig/src/gallium/auxiliary/gallivm/lp_bld.h
+++ mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld.h
@@ -81,10 +81,17 @@
#define LLVMInsertBasicBlock ILLEGAL_LLVM_FUNCTION
#define LLVMCreateBuilder ILLEGAL_LLVM_FUNCTION
-#if LLVM_VERSION_MAJOR >= 8
+#if LLVM_VERSION_MAJOR >= 15
+#define GALLIVM_HAVE_CORO 0
+#define GALLIVM_USE_NEW_PASS 1
+#elif LLVM_VERSION_MAJOR >= 8
#define GALLIVM_HAVE_CORO 1
+#define GALLIVM_USE_NEW_PASS 0
#else
#define GALLIVM_HAVE_CORO 0
+#define GALLIVM_USE_NEW_PASS 0
#endif
+#define GALLIVM_COROUTINES (GALLIVM_HAVE_CORO || GALLIVM_USE_NEW_PASS)
+
#endif /* LP_BLD_H */
Index: mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_arit.c
===================================================================
--- mesa-22.1.7.orig/src/gallium/auxiliary/gallivm/lp_bld_arit.c
+++ mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_arit.c
@@ -391,16 +391,10 @@ lp_build_comp(struct lp_build_context *b
return LLVMBuildNot(builder, a, "");
}
- if(LLVMIsConstant(a))
- if (type.floating)
- return LLVMConstFSub(bld->one, a);
- else
- return LLVMConstSub(bld->one, a);
+ if (type.floating)
+ return LLVMBuildFSub(builder, bld->one, a, "");
else
- if (type.floating)
- return LLVMBuildFSub(builder, bld->one, a, "");
- else
- return LLVMBuildSub(builder, bld->one, a, "");
+ return LLVMBuildSub(builder, bld->one, a, "");
}
@@ -479,16 +473,10 @@ lp_build_add(struct lp_build_context *bl
}
}
- if(LLVMIsConstant(a) && LLVMIsConstant(b))
- if (type.floating)
- res = LLVMConstFAdd(a, b);
- else
- res = LLVMConstAdd(a, b);
+ if (type.floating)
+ res = LLVMBuildFAdd(builder, a, b, "");
else
- if (type.floating)
- res = LLVMBuildFAdd(builder, a, b, "");
- else
- res = LLVMBuildAdd(builder, a, b, "");
+ res = LLVMBuildAdd(builder, a, b, "");
/* clamp to ceiling of 1.0 */
if(bld->type.norm && (bld->type.floating || bld->type.fixed))
@@ -815,16 +803,10 @@ lp_build_sub(struct lp_build_context *bl
}
}
- if(LLVMIsConstant(a) && LLVMIsConstant(b))
- if (type.floating)
- res = LLVMConstFSub(a, b);
- else
- res = LLVMConstSub(a, b);
+ if (type.floating)
+ res = LLVMBuildFSub(builder, a, b, "");
else
- if (type.floating)
- res = LLVMBuildFSub(builder, a, b, "");
- else
- res = LLVMBuildSub(builder, a, b, "");
+ res = LLVMBuildSub(builder, a, b, "");
if(bld->type.norm && (bld->type.floating || bld->type.fixed))
res = lp_build_max_simple(bld, res, bld->zero, GALLIVM_NAN_RETURN_OTHER_SECOND_NONNAN);
@@ -980,29 +962,15 @@ lp_build_mul(struct lp_build_context *bl
else
shift = NULL;
- if(LLVMIsConstant(a) && LLVMIsConstant(b)) {
- if (type.floating)
- res = LLVMConstFMul(a, b);
- else
- res = LLVMConstMul(a, b);
- if(shift) {
- if(type.sign)
- res = LLVMConstAShr(res, shift);
- else
- res = LLVMConstLShr(res, shift);
- }
- }
- else {
- if (type.floating)
- res = LLVMBuildFMul(builder, a, b, "");
+ if (type.floating)
+ res = LLVMBuildFMul(builder, a, b, "");
+ else
+ res = LLVMBuildMul(builder, a, b, "");
+ if(shift) {
+ if(type.sign)
+ res = LLVMBuildAShr(builder, res, shift, "");
else
- res = LLVMBuildMul(builder, a, b, "");
- if(shift) {
- if(type.sign)
- res = LLVMBuildAShr(builder, res, shift, "");
- else
- res = LLVMBuildLShr(builder, res, shift, "");
- }
+ res = LLVMBuildLShr(builder, res, shift, "");
}
return res;
@@ -1288,15 +1256,6 @@ lp_build_div(struct lp_build_context *bl
if(a == bld->undef || b == bld->undef)
return bld->undef;
- if(LLVMIsConstant(a) && LLVMIsConstant(b)) {
- if (type.floating)
- return LLVMConstFDiv(a, b);
- else if (type.sign)
- return LLVMConstSDiv(a, b);
- else
- return LLVMConstUDiv(a, b);
- }
-
/* fast rcp is disabled (just uses div), so makes no sense to try that */
if(FALSE &&
((util_get_cpu_caps()->has_sse && type.width == 32 && type.length == 4) ||
@@ -2646,7 +2605,7 @@ lp_build_rcp(struct lp_build_context *bl
assert(type.floating);
if(LLVMIsConstant(a))
- return LLVMConstFDiv(bld->one, a);
+ return LLVMBuildFDiv(builder, bld->one, a, "");
/*
* We don't use RCPPS because:
Index: mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_init.c
===================================================================
--- mesa-22.1.7.orig/src/gallium/auxiliary/gallivm/lp_bld_init.c
+++ mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_init.c
@@ -45,7 +45,9 @@
#include <llvm-c/Transforms/Utils.h>
#endif
#include <llvm-c/BitWriter.h>
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_USE_NEW_PASS == 1
+#include <llvm-c/Transforms/PassBuilder.h>
+#elif GALLIVM_HAVE_CORO == 1
#if LLVM_VERSION_MAJOR <= 8 && (defined(PIPE_ARCH_AARCH64) || defined (PIPE_ARCH_ARM) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_MIPS64))
#include <llvm-c/Transforms/IPO.h>
#endif
@@ -110,6 +112,7 @@ enum LLVM_CodeGenOpt_Level {
static boolean
create_pass_manager(struct gallivm_state *gallivm)
{
+#if GALLIVM_USE_NEW_PASS == 0
assert(!gallivm->passmgr);
assert(gallivm->target);
@@ -117,7 +120,7 @@ create_pass_manager(struct gallivm_state
if (!gallivm->passmgr)
return FALSE;
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_HAVE_CORO == 1
gallivm->cgpassmgr = LLVMCreatePassManager();
#endif
/*
@@ -134,7 +137,7 @@ create_pass_manager(struct gallivm_state
free(td_str);
}
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_HAVE_CORO == 1
#if LLVM_VERSION_MAJOR <= 8 && (defined(PIPE_ARCH_AARCH64) || defined (PIPE_ARCH_ARM) || defined(PIPE_ARCH_S390) || defined(PIPE_ARCH_MIPS64))
LLVMAddArgumentPromotionPass(gallivm->cgpassmgr);
LLVMAddFunctionAttrsPass(gallivm->cgpassmgr);
@@ -181,14 +184,13 @@ create_pass_manager(struct gallivm_state
*/
LLVMAddPromoteMemoryToRegisterPass(gallivm->passmgr);
}
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_HAVE_CORO == 1
LLVMAddCoroCleanupPass(gallivm->passmgr);
#endif
-
+#endif
return TRUE;
}
-
/**
* Free gallivm object's LLVM allocations, but not any generated code
* nor the gallivm object itself.
@@ -196,15 +198,17 @@ create_pass_manager(struct gallivm_state
void
gallivm_free_ir(struct gallivm_state *gallivm)
{
+#if GALLIVM_USE_NEW_PASS == 0
if (gallivm->passmgr) {
LLVMDisposePassManager(gallivm->passmgr);
}
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_HAVE_CORO == 1
if (gallivm->cgpassmgr) {
LLVMDisposePassManager(gallivm->cgpassmgr);
}
#endif
+#endif
if (gallivm->engine) {
/* This will already destroy any associated module */
@@ -232,8 +236,12 @@ gallivm_free_ir(struct gallivm_state *ga
gallivm->target = NULL;
gallivm->module = NULL;
gallivm->module_name = NULL;
+#if GALLIVM_USE_NEW_PASS == 0
+#if GALLIVM_HAVE_CORO == 1
gallivm->cgpassmgr = NULL;
+#endif
gallivm->passmgr = NULL;
+#endif
gallivm->context = NULL;
gallivm->builder = NULL;
gallivm->cache = NULL;
@@ -571,7 +579,6 @@ gallivm_verify_function(struct gallivm_s
void
gallivm_compile_module(struct gallivm_state *gallivm)
{
- LLVMValueRef func;
int64_t time_begin = 0;
assert(!gallivm->compiled);
@@ -581,6 +588,13 @@ gallivm_compile_module(struct gallivm_st
gallivm->builder = NULL;
}
+ LLVMSetDataLayout(gallivm->module, "");
+ assert(!gallivm->engine);
+ if (!init_gallivm_engine(gallivm)) {
+ assert(0);
+ }
+ assert(gallivm->engine);
+
if (gallivm->cache && gallivm->cache->data_size) {
goto skip_cached;
}
@@ -604,11 +618,33 @@ gallivm_compile_module(struct gallivm_st
if (gallivm_debug & GALLIVM_DEBUG_PERF)
time_begin = os_time_get();
-#if GALLIVM_HAVE_CORO
+#if GALLIVM_USE_NEW_PASS == 1
+ char passes[1024];
+ passes[0] = 0;
+
+ /*
+ * there should be some way to combine these two pass runs but I'm not seeing it,
+ * at the time of writing.
+ */
+ strcpy(passes, "default<O0>");
+
+ LLVMPassBuilderOptionsRef opts = LLVMCreatePassBuilderOptions();
+ LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts);
+
+ if (!(gallivm_perf & GALLIVM_PERF_NO_OPT))
+ strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,constprop,instcombine,");
+ else
+ strcpy(passes, "mem2reg");
+
+ LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts);
+ LLVMDisposePassBuilderOptions(opts);
+#else
+#if GALLIVM_HAVE_CORO == 1
LLVMRunPassManager(gallivm->cgpassmgr, gallivm->module);
#endif
/* Run optimization passes */
LLVMInitializeFunctionPassManager(gallivm->passmgr);
+ LLVMValueRef func;
func = LLVMGetFirstFunction(gallivm->module);
while (func) {
if (0) {
@@ -626,7 +662,7 @@ gallivm_compile_module(struct gallivm_st
func = LLVMGetNextFunction(func);
}
LLVMFinalizeFunctionPassManager(gallivm->passmgr);
-
+#endif
if (gallivm_debug & GALLIVM_DEBUG_PERF) {
int64_t time_end = os_time_get();
int time_msec = (int)((time_end - time_begin) / 1000);
@@ -653,12 +689,6 @@ gallivm_compile_module(struct gallivm_st
* lp_build_create_jit_compiler_for_module()
*/
skip_cached:
- LLVMSetDataLayout(gallivm->module, "");
- assert(!gallivm->engine);
- if (!init_gallivm_engine(gallivm)) {
- assert(0);
- }
- assert(gallivm->engine);
++gallivm->compiled;
Index: mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_init.h
===================================================================
--- mesa-22.1.7.orig/src/gallium/auxiliary/gallivm/lp_bld_init.h
+++ mesa-22.1.7/src/gallium/auxiliary/gallivm/lp_bld_init.h
@@ -46,8 +46,12 @@ struct gallivm_state
LLVMModuleRef module;
LLVMExecutionEngineRef engine;
LLVMTargetDataRef target;
+#if GALLIVM_USE_NEW_PASS == 0
LLVMPassManagerRef passmgr;
+#if GALLIVM_HAVE_CORO == 1
LLVMPassManagerRef cgpassmgr;
+#endif
+#endif
LLVMContextRef context;
LLVMBuilderRef builder;
LLVMMCJITMemoryManagerRef memorymgr;
Index: mesa-22.1.7/src/gallium/drivers/llvmpipe/lp_screen.c
===================================================================
--- mesa-22.1.7.orig/src/gallium/drivers/llvmpipe/lp_screen.c
+++ mesa-22.1.7/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -215,7 +215,7 @@ llvmpipe_get_param(struct pipe_screen *s
return lscreen->use_tgsi ? 330 : 450;
}
case PIPE_CAP_COMPUTE:
- return GALLIVM_HAVE_CORO;
+ return GALLIVM_COROUTINES;
case PIPE_CAP_USER_VERTEX_BUFFERS:
return 1;
case PIPE_CAP_TGSI_TEXCOORD:
@@ -394,7 +394,7 @@ llvmpipe_get_shader_param(struct pipe_sc
case PIPE_SHADER_TESS_CTRL:
case PIPE_SHADER_TESS_EVAL:
/* Tessellation shader needs llvm coroutines support */
- if (!GALLIVM_HAVE_CORO || lscreen->use_tgsi)
+ if (!GALLIVM_COROUTINES || lscreen->use_tgsi)
return 0;
FALLTHROUGH;
case PIPE_SHADER_VERTEX:
Index: mesa-22.1.7/src/gallium/frontends/clover/llvm/compat.hpp
===================================================================
--- mesa-22.1.7.orig/src/gallium/frontends/clover/llvm/compat.hpp
+++ mesa-22.1.7/src/gallium/frontends/clover/llvm/compat.hpp
@@ -102,7 +102,11 @@ namespace clover {
clang::InputKind ik, const ::llvm::Triple& triple,
clang::LangStandard::Kind d)
{
+#if LLVM_VERSION_MAJOR >= 15
+ c->getLangOpts().setLangDefaults(c->getLangOpts(), ik.getLanguage(), triple,
+#else
c->getInvocation().setLangDefaults(c->getLangOpts(), ik, triple,
+#endif
#if LLVM_VERSION_MAJOR >= 12
c->getPreprocessorOpts().Includes,
#else

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:da838eb2cf11d0e08d0e9944f6bd4d96987fdc59ea2856f8c70a31a82b355d89
size 16109944

Binary file not shown.

3
mesa-22.2.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b1f9c8fd08f2cae3adf83355bef4d2398e8025f44947332880f2d0066bdafa8c
size 16298808

BIN
mesa-22.2.0.tar.xz.sig Normal file

Binary file not shown.