Compare commits
No commits in common. "c8" and "a9" have entirely different histories.
.gitignore.mesa.metadata
SOURCES
0001-Revert-ac-radeonsi-remove-has_syncobj-has_fence_to_h.patch0001-clover-llvm-move-to-modern-pass-manager.patch0001-llvmpipe-Init-eglQueryDmaBufModifiersEXT-num_modifie.patch0001-llvmpipe-only-include-old-Transform-includes-when-ne.patch0001-mesa-fix-off-by-one-for-newblock-allocation-in-dlist.patch0001-nouveau-nvc0-increase-overallocation-on-shader-bo-to.patchMakefilefix-egl-on-s390x.patchfix-py-ver.patchlavapipe-disable-env-var.patchnouveau-work-around-linear-zs-issue.patchradeonsi-turn-off-glthread.patchraspberrypi-2712D0.patchvl_decoder.cvl_mpeg12_decoder.c
SPECS
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
SOURCES/dataclasses-0.8.tar.gz
|
||||
SOURCES/mesa-23.1.4.tar.xz
|
||||
SOURCES/meson-0.61.4.tar.gz
|
||||
SOURCES/libclc-18.1.2.src.tar.xz
|
||||
SOURCES/mesa-24.1.2.tar.xz
|
||||
SOURCES/meson-1.3.0.tar.gz
|
||||
SOURCES/spirv-llvm-translator-259f72c.tar.gz
|
||||
SOURCES/wayland-protocols-1.34.tar.xz
|
||||
|
@ -1,3 +1,5 @@
|
||||
ef25d3e9e2523805baa314a4adcb915ae901740e SOURCES/dataclasses-0.8.tar.gz
|
||||
8a48c0e1fbda2c9563ddcf95b05012ab00a8a692 SOURCES/mesa-23.1.4.tar.xz
|
||||
b0ab169abd8ec87ce773a02b2c7d6a8664b8db00 SOURCES/meson-0.61.4.tar.gz
|
||||
fd59e738537ad513a715d5080682d9a690480ebe SOURCES/libclc-18.1.2.src.tar.xz
|
||||
5cdb8437b70ba4c384d602052b7396aab2018363 SOURCES/mesa-24.1.2.tar.xz
|
||||
6e2c98cccd1b85d5fe8716e7b0f6f080acd77f37 SOURCES/meson-1.3.0.tar.gz
|
||||
d86613dcde6eb304e204df4e4d466edbc45f7c13 SOURCES/spirv-llvm-translator-259f72c.tar.gz
|
||||
9e2df4b15428c0b0ce7d9256d4f469b70daab524 SOURCES/wayland-protocols-1.34.tar.xz
|
||||
|
@ -0,0 +1,153 @@
|
||||
From fddf49504e1bebb7efc52c1a0516300c0f217f18 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
|
||||
Date: Wed, 26 Jun 2024 12:11:48 +0200
|
||||
Subject: [PATCH] Revert "ac, radeonsi: remove has_syncobj,
|
||||
has_fence_to_handle"
|
||||
|
||||
This reverts commit 02fe3c32cdfc3cf48cd691d6321978b8d4c3e61b.
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11352
|
||||
---
|
||||
src/amd/common/ac_gpu_info.c | 12 ++++++++++++
|
||||
src/amd/common/ac_gpu_info.h | 2 ++
|
||||
src/gallium/drivers/r600/r600_pipe_common.c | 1 +
|
||||
src/gallium/drivers/radeonsi/si_fence.c | 10 ++++++++++
|
||||
src/gallium/drivers/radeonsi/si_get.c | 8 ++++++--
|
||||
5 files changed, 31 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c
|
||||
index 78febf796b4..3f711bd45ec 100644
|
||||
--- a/src/amd/common/ac_gpu_info.c
|
||||
+++ b/src/amd/common/ac_gpu_info.c
|
||||
@@ -355,6 +355,14 @@ static intptr_t readlink(const char *path, char *buf, size_t bufsiz)
|
||||
|
||||
#define CIK_TILE_MODE_COLOR_2D 14
|
||||
|
||||
+static bool has_syncobj(int fd)
|
||||
+{
|
||||
+ uint64_t value;
|
||||
+ if (drmGetCap(fd, DRM_CAP_SYNCOBJ, &value))
|
||||
+ return false;
|
||||
+ return value ? true : false;
|
||||
+}
|
||||
+
|
||||
static bool has_timeline_syncobj(int fd)
|
||||
{
|
||||
uint64_t value;
|
||||
@@ -1068,7 +1076,9 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info,
|
||||
info->memory_freq_mhz_effective *= ac_memory_ops_per_clock(info->vram_type);
|
||||
|
||||
info->has_userptr = true;
|
||||
+ info->has_syncobj = has_syncobj(fd);
|
||||
info->has_timeline_syncobj = has_timeline_syncobj(fd);
|
||||
+ info->has_fence_to_handle = info->has_syncobj;
|
||||
info->has_local_buffers = true;
|
||||
info->has_bo_metadata = true;
|
||||
info->has_eqaa_surface_allocator = info->gfx_level < GFX11;
|
||||
@@ -1974,7 +1984,9 @@ void ac_print_gpu_info(const struct radeon_info *info, FILE *f)
|
||||
fprintf(f, "Kernel & winsys capabilities:\n");
|
||||
fprintf(f, " drm = %i.%i.%i\n", info->drm_major, info->drm_minor, info->drm_patchlevel);
|
||||
fprintf(f, " has_userptr = %i\n", info->has_userptr);
|
||||
+ fprintf(f, " has_syncobj = %u\n", info->has_syncobj);
|
||||
fprintf(f, " has_timeline_syncobj = %u\n", info->has_timeline_syncobj);
|
||||
+ fprintf(f, " has_fence_to_handle = %u\n", info->has_fence_to_handle);
|
||||
fprintf(f, " has_local_buffers = %u\n", info->has_local_buffers);
|
||||
fprintf(f, " has_bo_metadata = %u\n", info->has_bo_metadata);
|
||||
fprintf(f, " has_eqaa_surface_allocator = %u\n", info->has_eqaa_surface_allocator);
|
||||
diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h
|
||||
index 68fbe909a97..40670d87770 100644
|
||||
--- a/src/amd/common/ac_gpu_info.h
|
||||
+++ b/src/amd/common/ac_gpu_info.h
|
||||
@@ -218,7 +218,9 @@ struct radeon_info {
|
||||
uint32_t max_submitted_ibs[AMD_NUM_IP_TYPES];
|
||||
bool is_amdgpu;
|
||||
bool has_userptr;
|
||||
+ bool has_syncobj;
|
||||
bool has_timeline_syncobj;
|
||||
+ bool has_fence_to_handle;
|
||||
bool has_local_buffers;
|
||||
bool has_bo_metadata;
|
||||
bool has_eqaa_surface_allocator;
|
||||
diff --git a/src/gallium/drivers/r600/r600_pipe_common.c b/src/gallium/drivers/r600/r600_pipe_common.c
|
||||
index aaa171a07ed..5a10aad5907 100644
|
||||
--- a/src/gallium/drivers/r600/r600_pipe_common.c
|
||||
+++ b/src/gallium/drivers/r600/r600_pipe_common.c
|
||||
@@ -1338,6 +1338,7 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
|
||||
printf("drm = %i.%i.%i\n", rscreen->info.drm_major,
|
||||
rscreen->info.drm_minor, rscreen->info.drm_patchlevel);
|
||||
printf("has_userptr = %i\n", rscreen->info.has_userptr);
|
||||
+ printf("has_syncobj = %u\n", rscreen->info.has_syncobj);
|
||||
|
||||
printf("r600_max_quad_pipes = %i\n", rscreen->info.r600_max_quad_pipes);
|
||||
printf("max_gpu_freq_mhz = %i\n", rscreen->info.max_gpu_freq_mhz);
|
||||
diff --git a/src/gallium/drivers/radeonsi/si_fence.c b/src/gallium/drivers/radeonsi/si_fence.c
|
||||
index a1ae9125e00..1d2406df9fd 100644
|
||||
--- a/src/gallium/drivers/radeonsi/si_fence.c
|
||||
+++ b/src/gallium/drivers/radeonsi/si_fence.c
|
||||
@@ -374,10 +374,16 @@ static void si_create_fence_fd(struct pipe_context *ctx, struct pipe_fence_handl
|
||||
|
||||
switch (type) {
|
||||
case PIPE_FD_TYPE_NATIVE_SYNC:
|
||||
+ if (!sscreen->info.has_fence_to_handle)
|
||||
+ goto finish;
|
||||
+
|
||||
sfence->gfx = ws->fence_import_sync_file(ws, fd);
|
||||
break;
|
||||
|
||||
case PIPE_FD_TYPE_SYNCOBJ:
|
||||
+ if (!sscreen->info.has_syncobj)
|
||||
+ goto finish;
|
||||
+
|
||||
sfence->gfx = ws->fence_import_syncobj(ws, fd);
|
||||
break;
|
||||
|
||||
@@ -385,6 +391,7 @@ static void si_create_fence_fd(struct pipe_context *ctx, struct pipe_fence_handl
|
||||
unreachable("bad fence fd type when importing");
|
||||
}
|
||||
|
||||
+finish:
|
||||
if (!sfence->gfx) {
|
||||
FREE(sfence);
|
||||
return;
|
||||
@@ -400,6 +407,9 @@ static int si_fence_get_fd(struct pipe_screen *screen, struct pipe_fence_handle
|
||||
struct si_fence *sfence = (struct si_fence *)fence;
|
||||
int gfx_fd = -1;
|
||||
|
||||
+ if (!sscreen->info.has_fence_to_handle)
|
||||
+ return -1;
|
||||
+
|
||||
util_queue_fence_wait(&sfence->ready);
|
||||
|
||||
/* Deferred fences aren't supported. */
|
||||
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
|
||||
index a9ac90dca52..3c8a75e9583 100644
|
||||
--- a/src/gallium/drivers/radeonsi/si_get.c
|
||||
+++ b/src/gallium/drivers/radeonsi/si_get.c
|
||||
@@ -168,8 +168,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_ALLOW_GLTHREAD_BUFFER_SUBDATA_OPT: /* TODO: remove if it's slow */
|
||||
case PIPE_CAP_NULL_TEXTURES:
|
||||
case PIPE_CAP_HAS_CONST_BW:
|
||||
- case PIPE_CAP_FENCE_SIGNAL:
|
||||
- case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
case PIPE_CAP_CL_GL_SHARING:
|
||||
return 1;
|
||||
|
||||
@@ -287,9 +285,15 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
PIPE_CONTEXT_PRIORITY_MEDIUM |
|
||||
PIPE_CONTEXT_PRIORITY_HIGH;
|
||||
|
||||
+ case PIPE_CAP_FENCE_SIGNAL:
|
||||
+ return sscreen->info.has_syncobj;
|
||||
+
|
||||
case PIPE_CAP_CONSTBUF0_FLAGS:
|
||||
return SI_RESOURCE_FLAG_32BIT;
|
||||
|
||||
+ case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
+ return sscreen->info.has_fence_to_handle;
|
||||
+
|
||||
case PIPE_CAP_DRAW_PARAMETERS:
|
||||
case PIPE_CAP_MULTI_DRAW_INDIRECT:
|
||||
case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
|
||||
--
|
||||
2.45.2
|
||||
|
@ -1,127 +0,0 @@
|
||||
From 2d4fe5f229791fde52846b3f583c12508b5109d6 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Fri, 25 Aug 2023 12:43:44 +1000
|
||||
Subject: [PATCH] clover/llvm: move to modern pass manager.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This seems like it should work, but I haven't tested it yet.
|
||||
|
||||
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24879>
|
||||
---
|
||||
.../frontends/clover/llvm/invocation.cpp | 64 +++++++++++++++----
|
||||
1 file changed, 51 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/frontends/clover/llvm/invocation.cpp b/src/gallium/frontends/clover/llvm/invocation.cpp
|
||||
index 7a50fea3323..43d26fe1abb 100644
|
||||
--- a/src/gallium/frontends/clover/llvm/invocation.cpp
|
||||
+++ b/src/gallium/frontends/clover/llvm/invocation.cpp
|
||||
@@ -27,13 +27,17 @@
|
||||
#include <llvm/IR/DiagnosticPrinter.h>
|
||||
#include <llvm/IR/DiagnosticInfo.h>
|
||||
#include <llvm/IR/LLVMContext.h>
|
||||
+#include <llvm/IR/Module.h>
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
-#include <llvm/Transforms/IPO/PassManagerBuilder.h>
|
||||
+#include <llvm/Transforms/IPO/Internalize.h>
|
||||
#include <llvm-c/Target.h>
|
||||
#ifdef HAVE_CLOVER_SPIRV
|
||||
#include <LLVMSPIRVLib/LLVMSPIRVLib.h>
|
||||
#endif
|
||||
|
||||
+#include <llvm-c/TargetMachine.h>
|
||||
+#include <llvm-c/Transforms/PassBuilder.h>
|
||||
+#include <llvm/Support/CBindingWrapping.h>
|
||||
#include <clang/CodeGen/CodeGenAction.h>
|
||||
#include <clang/Lex/PreprocessorOptions.h>
|
||||
#include <clang/Frontend/TextDiagnosticBuffer.h>
|
||||
@@ -439,10 +443,10 @@ clover::llvm::compile_program(const std::string &source,
|
||||
|
||||
namespace {
|
||||
void
|
||||
- optimize(Module &mod, unsigned optimization_level,
|
||||
+ optimize(Module &mod,
|
||||
+ const std::string& ir_target,
|
||||
+ unsigned optimization_level,
|
||||
bool internalize_symbols) {
|
||||
- ::llvm::legacy::PassManager pm;
|
||||
-
|
||||
// By default, the function internalizer pass will look for a function
|
||||
// called "main" and then mark all other functions as internal. Marking
|
||||
// functions as internal enables the optimizer to perform optimizations
|
||||
@@ -458,19 +462,53 @@ namespace {
|
||||
if (internalize_symbols) {
|
||||
std::vector<std::string> names =
|
||||
map(std::mem_fn(&Function::getName), get_kernels(mod));
|
||||
- pm.add(::llvm::createInternalizePass(
|
||||
+ internalizeModule(mod,
|
||||
[=](const ::llvm::GlobalValue &gv) {
|
||||
return std::find(names.begin(), names.end(),
|
||||
gv.getName()) != names.end();
|
||||
- }));
|
||||
+ });
|
||||
}
|
||||
|
||||
- ::llvm::PassManagerBuilder pmb;
|
||||
- pmb.OptLevel = optimization_level;
|
||||
- pmb.LibraryInfo = new ::llvm::TargetLibraryInfoImpl(
|
||||
- ::llvm::Triple(mod.getTargetTriple()));
|
||||
- pmb.populateModulePassManager(pm);
|
||||
- pm.run(mod);
|
||||
+
|
||||
+ const char *opt_str = NULL;
|
||||
+ LLVMCodeGenOptLevel level;
|
||||
+ switch (optimization_level) {
|
||||
+ case 0:
|
||||
+ default:
|
||||
+ opt_str = "default<O0>";
|
||||
+ level = LLVMCodeGenLevelNone;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ opt_str = "default<O1>";
|
||||
+ level = LLVMCodeGenLevelLess;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ opt_str = "default<O2>";
|
||||
+ level = LLVMCodeGenLevelDefault;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ opt_str = "default<O3>";
|
||||
+ level = LLVMCodeGenLevelAggressive;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ const target &target = ir_target;
|
||||
+ LLVMTargetRef targ;
|
||||
+ char *err_message;
|
||||
+
|
||||
+ if (LLVMGetTargetFromTriple(target.triple.c_str(), &targ, &err_message))
|
||||
+ return;
|
||||
+ LLVMTargetMachineRef tm =
|
||||
+ LLVMCreateTargetMachine(targ, target.triple.c_str(),
|
||||
+ target.cpu.c_str(), "", level,
|
||||
+ LLVMRelocDefault, LLVMCodeModelDefault);
|
||||
+
|
||||
+ if (!tm)
|
||||
+ return;
|
||||
+ LLVMPassBuilderOptionsRef opts = LLVMCreatePassBuilderOptions();
|
||||
+ LLVMRunPasses(wrap(&mod), opt_str, tm, opts);
|
||||
+
|
||||
+ LLVMDisposeTargetMachine(tm);
|
||||
}
|
||||
|
||||
std::unique_ptr<Module>
|
||||
@@ -500,7 +538,7 @@ clover::llvm::link_program(const std::vector<binary> &binaries,
|
||||
auto c = create_compiler_instance(dev, dev.ir_target(), options, r_log);
|
||||
auto mod = link(*ctx, *c, binaries, r_log);
|
||||
|
||||
- optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library);
|
||||
+ optimize(*mod, dev.ir_target(), c->getCodeGenOpts().OptimizationLevel, !create_library);
|
||||
|
||||
static std::atomic_uint seq(0);
|
||||
const std::string id = "." + mod->getModuleIdentifier() + "-" +
|
||||
--
|
||||
2.42.0
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 1f3ea20998329788f6a14166d8ba9b3948b7e864 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Thu, 27 Jun 2024 13:07:11 +0200
|
||||
Subject: [PATCH] llvmpipe: Init eglQueryDmaBufModifiersEXT num_modifiers
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Initialize the number of modifiers when `max` is 0 as documented [1]:
|
||||
|
||||
If <max_formats> is 0, no formats are returned, but the total number
|
||||
of formats is returned in <num_formats>, and no error is generated.
|
||||
|
||||
[1] https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt
|
||||
Fixes: d74ea2c117fe ("llvmpipe: Implement dmabuf handling")
|
||||
Signed-off-by: José Expósito <jexposit@redhat.com>
|
||||
---
|
||||
src/gallium/drivers/llvmpipe/lp_texture.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c
|
||||
index 0044e689aab..30d5057cf9f 100644
|
||||
--- a/src/gallium/drivers/llvmpipe/lp_texture.c
|
||||
+++ b/src/gallium/drivers/llvmpipe/lp_texture.c
|
||||
@@ -1724,10 +1724,10 @@ llvmpipe_resource_get_param(struct pipe_screen *screen,
|
||||
static void
|
||||
llvmpipe_query_dmabuf_modifiers(struct pipe_screen *pscreen, enum pipe_format format, int max, uint64_t *modifiers, unsigned int *external_only, int *count)
|
||||
{
|
||||
- if (max) {
|
||||
- *count = 1;
|
||||
+ *count = 1;
|
||||
+
|
||||
+ if (max)
|
||||
*modifiers = DRM_FORMAT_MOD_LINEAR;
|
||||
- }
|
||||
}
|
||||
|
||||
static bool
|
||||
--
|
||||
2.45.2
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 9ba416cdc67073cdda9a73fe9d37304b82bdd526 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
|
||||
Date: Fri, 12 May 2023 09:58:26 +0200
|
||||
Subject: [PATCH] llvmpipe: only include old Transform includes when needed
|
||||
|
||||
This fixes building with recent LLVM where these 2 .h files
|
||||
were removed.
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8671
|
||||
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22980>
|
||||
---
|
||||
src/gallium/auxiliary/gallivm/lp_bld_init.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c
|
||||
index 24d082398e9..9e0d6a5f643 100644
|
||||
--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c
|
||||
+++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c
|
||||
@@ -42,14 +42,14 @@
|
||||
|
||||
#include <llvm/Config/llvm-config.h>
|
||||
#include <llvm-c/Analysis.h>
|
||||
-#include <llvm-c/Transforms/Scalar.h>
|
||||
-#if LLVM_VERSION_MAJOR >= 7
|
||||
-#include <llvm-c/Transforms/Utils.h>
|
||||
-#endif
|
||||
#include <llvm-c/BitWriter.h>
|
||||
#if GALLIVM_USE_NEW_PASS == 1
|
||||
#include <llvm-c/Transforms/PassBuilder.h>
|
||||
#elif GALLIVM_HAVE_CORO == 1
|
||||
+#include <llvm-c/Transforms/Scalar.h>
|
||||
+#if LLVM_VERSION_MAJOR >= 7
|
||||
+#include <llvm-c/Transforms/Utils.h>
|
||||
+#endif
|
||||
#if LLVM_VERSION_MAJOR <= 8 && (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM || DETECT_ARCH_S390 || DETECT_ARCH_MIPS64)
|
||||
#include <llvm-c/Transforms/IPO.h>
|
||||
#endif
|
||||
--
|
||||
2.42.0
|
||||
|
@ -1,28 +0,0 @@
|
||||
From 460d2c46a903fed295a1528c8b6273dd6b0e0d19 Mon Sep 17 00:00:00 2001
|
||||
From: thfrwn <11335318+rfht@users.noreply.github.com>
|
||||
Date: Fri, 9 Feb 2024 17:00:55 -0500
|
||||
Subject: [PATCH] mesa: fix off-by-one for newblock allocation in dlist_alloc
|
||||
|
||||
Cc: mesa-stable
|
||||
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27556>
|
||||
---
|
||||
src/mesa/main/dlist.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
|
||||
index b0184a24e20..9213641699a 100644
|
||||
--- a/src/mesa/main/dlist.c
|
||||
+++ b/src/mesa/main/dlist.c
|
||||
@@ -1220,7 +1220,7 @@ dlist_alloc(struct gl_context *ctx, OpCode opcode, GLuint bytes, bool align8)
|
||||
ctx->ListState.CurrentPos++;
|
||||
}
|
||||
|
||||
- if (ctx->ListState.CurrentPos + numNodes + contNodes > BLOCK_SIZE) {
|
||||
+ if (ctx->ListState.CurrentPos + numNodes + contNodes >= BLOCK_SIZE) {
|
||||
/* This block is full. Allocate a new block and chain to it */
|
||||
Node *newblock;
|
||||
Node *n = ctx->ListState.CurrentBlock + ctx->ListState.CurrentPos;
|
||||
--
|
||||
2.45.2
|
||||
|
@ -1,37 +0,0 @@
|
||||
From f7434d7576032cf97e3c74ef09912f59617a4bad Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Fri, 14 Jun 2024 12:22:58 +1000
|
||||
Subject: [PATCH] nouveau/nvc0: increase overallocation on shader bo to 2K
|
||||
|
||||
I've been seeing a bunch of read page faults at the end of the
|
||||
shader allocation, nvk uses a full page at the end to overallocate
|
||||
so align with that and see if it goes away.
|
||||
|
||||
ahulliet and skeggsb both said 2k was used.
|
||||
|
||||
Cc: mesa-stable
|
||||
Reviewed-by: Arthur Huillet <ahuillet@nvidia.com>
|
||||
Reviewed-by: Karol Herbst <kherbst@redhat.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29722>
|
||||
---
|
||||
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff -up mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c.dma mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
|
||||
--- mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c.dma 2023-07-21 22:42:42.000000000 +1000
|
||||
+++ mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 2024-08-16 12:49:13.532998512 +1000
|
||||
@@ -886,10 +886,11 @@ nvc0_screen_resize_text_area(struct nvc0
|
||||
nouveau_heap_free(&screen->lib_code);
|
||||
nouveau_heap_destroy(&screen->text_heap);
|
||||
|
||||
- /* XXX: getting a page fault at the end of the code buffer every few
|
||||
- * launches, don't use the last 256 bytes to work around them - prefetch ?
|
||||
+ /*
|
||||
+ * Shader storage needs a 2K (from NVIDIA) overallocations at the end
|
||||
+ * to avoid prefetch bugs.
|
||||
*/
|
||||
- nouveau_heap_init(&screen->text_heap, 0, size - 0x100);
|
||||
+ nouveau_heap_init(&screen->text_heap, 0, size - 0x800);
|
||||
|
||||
/* update the code segment setup */
|
||||
if (screen->eng3d->oclass < GV100_3D_CLASS) {
|
@ -1,23 +0,0 @@
|
||||
VERSION ?= 23.1.4
|
||||
SANITIZE ?= 1
|
||||
|
||||
DIRNAME = mesa-${VERSION}
|
||||
|
||||
all: archive
|
||||
|
||||
clean:
|
||||
rm -rf $(DIRNAME)/
|
||||
rm -f mesa-${VERSION}.tar.xz
|
||||
|
||||
clone: clean
|
||||
curl -O https://archive.mesa3d.org/mesa-${VERSION}.tar.xz
|
||||
tar xf mesa-${VERSION}.tar.xz
|
||||
|
||||
sanitize: clone vl_mpeg12_decoder.c vl_decoder.c
|
||||
ifdef SANITIZE
|
||||
cat < vl_mpeg12_decoder.c > $(DIRNAME)/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
|
||||
cat < vl_decoder.c > $(DIRNAME)/src/gallium/auxiliary/vl/vl_decoder.c
|
||||
endif
|
||||
|
||||
archive: clone sanitize
|
||||
tar caf ${DIRNAME}.tar.xz ${DIRNAME}
|
131
SOURCES/fix-egl-on-s390x.patch
Normal file
131
SOURCES/fix-egl-on-s390x.patch
Normal file
@ -0,0 +1,131 @@
|
||||
From 5ca85d75c05de9df7c3170122dfdb04bc795b43a Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stone <daniels@collabora.com>
|
||||
Date: Fri, 21 Jun 2024 11:24:31 +0100
|
||||
Subject: [PATCH 1/3] dri: Fix BGR format exclusion
|
||||
|
||||
The check we had for BGR vs. RGB formats was testing completely the
|
||||
wrong thing. Fix it so we can restore the previous set of configs we
|
||||
expose to the frontend, which also fixes surfaceless platform on s390x.
|
||||
|
||||
Signed-off-by: Daniel Stone <daniels@collabora.com>
|
||||
Fixes: ad0edea53a73 ("st/dri: Check format properties from format helpers")
|
||||
Closes: mesa/mesa#11360
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29837>
|
||||
---
|
||||
src/gallium/frontends/dri/dri_screen.c | 20 ++++++++++++--------
|
||||
1 file changed, 12 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c
|
||||
index 97d11f324ee0b..2e9ce01147a89 100644
|
||||
--- a/src/gallium/frontends/dri/dri_screen.c
|
||||
+++ b/src/gallium/frontends/dri/dri_screen.c
|
||||
@@ -386,17 +386,21 @@ dri_fill_in_modes(struct dri_screen *screen)
|
||||
uint8_t msaa_modes[MSAA_VISUAL_MAX_SAMPLES];
|
||||
|
||||
/* Expose only BGRA ordering if the loader doesn't support RGBA ordering. */
|
||||
- if (!allow_rgba_ordering &&
|
||||
- util_format_get_component_shift(pipe_formats[f],
|
||||
- UTIL_FORMAT_COLORSPACE_RGB, 0)
|
||||
+ if (!allow_rgba_ordering) {
|
||||
+ unsigned sh_ax = util_format_get_component_shift(pipe_formats[f], UTIL_FORMAT_COLORSPACE_RGB, 3);
|
||||
+ unsigned sh_b = util_format_get_component_shift(pipe_formats[f], UTIL_FORMAT_COLORSPACE_RGB, 2);
|
||||
#if UTIL_ARCH_BIG_ENDIAN
|
||||
- >
|
||||
+ unsigned sz_b = util_format_get_component_bits(pipe_formats[f], UTIL_FORMAT_COLORSPACE_RGB, 2);
|
||||
+
|
||||
+ if (sz_b + sh_b == sh_ax)
|
||||
+ continue;
|
||||
#else
|
||||
- <
|
||||
+ unsigned sz_ax = util_format_get_component_bits(pipe_formats[f], UTIL_FORMAT_COLORSPACE_RGB, 3);
|
||||
+
|
||||
+ if (sz_ax + sh_ax == sh_b)
|
||||
+ continue;
|
||||
#endif
|
||||
- util_format_get_component_shift(pipe_formats[f],
|
||||
- UTIL_FORMAT_COLORSPACE_RGB, 2))
|
||||
- continue;
|
||||
+ }
|
||||
|
||||
if (!allow_rgb10 &&
|
||||
util_format_get_component_bits(pipe_formats[f],
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 94e15d0f64a3a5ca6b86a3e02343cac0d453aed6 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stone <daniels@collabora.com>
|
||||
Date: Fri, 21 Jun 2024 14:19:06 +0100
|
||||
Subject: [PATCH 2/3] egl/surfaceless: Enable RGBA configs
|
||||
|
||||
Doing this is harmless since we operate on an allowlist of pipe_configs
|
||||
anyway.
|
||||
|
||||
Signed-off-by: Daniel Stone <daniels@collabora.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29837>
|
||||
---
|
||||
src/egl/drivers/dri2/platform_surfaceless.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c
|
||||
index 0668ec9285ff3..4b69874d3f60a 100644
|
||||
--- a/src/egl/drivers/dri2/platform_surfaceless.c
|
||||
+++ b/src/egl/drivers/dri2/platform_surfaceless.c
|
||||
@@ -190,6 +190,8 @@ surfaceless_get_capability(void *loaderPrivate, enum dri_loader_cap cap)
|
||||
switch (cap) {
|
||||
case DRI_LOADER_CAP_FP16:
|
||||
return 1;
|
||||
+ case DRI_LOADER_CAP_RGBA_ORDERING:
|
||||
+ return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 9eeaa4618f8a7bc8215ac3f195ced7f8eae4342e Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stone <daniels@collabora.com>
|
||||
Date: Fri, 21 Jun 2024 14:19:06 +0100
|
||||
Subject: [PATCH 3/3] egl/gbm: Enable RGBA configs
|
||||
|
||||
Doing this is harmless since we operate on an allowlist of pipe_configs
|
||||
anyway.
|
||||
|
||||
Signed-off-by: Daniel Stone <daniels@collabora.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29837>
|
||||
---
|
||||
src/gallium/drivers/lima/ci/lima-fails.txt | 2 --
|
||||
src/gbm/backends/dri/gbm_dri.c | 2 ++
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/gallium/drivers/lima/ci/lima-fails.txt b/src/gallium/drivers/lima/ci/lima-fails.txt
|
||||
index d6c4edbb5ef5e..155498dbb5679 100644
|
||||
--- a/src/gallium/drivers/lima/ci/lima-fails.txt
|
||||
+++ b/src/gallium/drivers/lima/ci/lima-fails.txt
|
||||
@@ -55,9 +55,7 @@ wayland-dEQP-EGL.functional.wide_color.window_888_colorspace_srgb,Fail
|
||||
|
||||
x11-dEQP-EGL.functional.create_context.no_config,Fail
|
||||
x11-dEQP-EGL.functional.image.modify.renderbuffer_depth16_renderbuffer_clear_depth,Fail
|
||||
-x11-dEQP-EGL.functional.render.multi_context.gles2.rgb888_window,Fail
|
||||
x11-dEQP-EGL.functional.render.multi_context.gles2.rgba8888_pbuffer,Fail
|
||||
-x11-dEQP-EGL.functional.render.multi_thread.gles2.rgb888_window,Fail
|
||||
x11-dEQP-EGL.functional.render.multi_thread.gles2.rgba8888_pbuffer,Fail
|
||||
x11-dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_srgb,Fail
|
||||
x11-dEQP-EGL.functional.wide_color.window_8888_colorspace_srgb,Fail
|
||||
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
|
||||
index 0526f4f8dc16f..6cc2d5d8197f5 100644
|
||||
--- a/src/gbm/backends/dri/gbm_dri.c
|
||||
+++ b/src/gbm/backends/dri/gbm_dri.c
|
||||
@@ -108,6 +108,8 @@ dri_get_capability(void *loaderPrivate, enum dri_loader_cap cap)
|
||||
switch (cap) {
|
||||
case DRI_LOADER_CAP_FP16:
|
||||
return 1;
|
||||
+ case DRI_LOADER_CAP_RGBA_ORDERING:
|
||||
+ return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -up mesa-23.1.4/meson.build.dma mesa-23.1.4/meson.build
|
||||
--- mesa-23.1.4/meson.build.dma 2023-07-28 10:15:41.807945483 +1000
|
||||
+++ mesa-23.1.4/meson.build 2023-07-28 10:15:46.465030794 +1000
|
||||
@@ -835,7 +835,7 @@ if get_option('allow-kcmp') \
|
||||
pre_args += '-DALLOW_KCMP'
|
||||
endif
|
||||
|
||||
-prog_python = import('python').find_installation('python3')
|
||||
+prog_python = import('python').find_installation('python3.6')
|
||||
has_mako = run_command(
|
||||
prog_python, '-c',
|
||||
'''
|
@ -1,13 +0,0 @@
|
||||
diff -up mesa-21.3.0/src/gallium/frontends/lavapipe/lvp_device.cdma mesa-21.3.0/src/gallium/frontends/lavapipe/lvp_device.c
|
||||
--- mesa-21.3.0/src/gallium/frontends/lavapipe/lvp_device.cdma 2021-11-18 06:16:20.000000000 +1000
|
||||
+++ mesa-21.3.0/src/gallium/frontends/lavapipe/lvp_device.c 2021-11-18 07:03:17.652283186 +1000
|
||||
@@ -213,6 +213,9 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_Creat
|
||||
if (pAllocator == NULL)
|
||||
pAllocator = vk_default_allocator();
|
||||
|
||||
+ if (!getenv("RH_SW_VULKAN"))
|
||||
+ return VK_ERROR_INITIALIZATION_FAILED;
|
||||
+
|
||||
instance = vk_zalloc(pAllocator, sizeof(*instance), 8,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
|
||||
if (!instance)
|
@ -1,30 +0,0 @@
|
||||
diff -up mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c.da mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
|
||||
--- mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c.da 2025-01-10 13:14:31.119630821 +1000
|
||||
+++ mesa-23.1.4/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c 2025-01-10 13:15:11.917433170 +1000
|
||||
@@ -149,6 +149,7 @@ nvc0_validate_fb(struct nvc0_context *nv
|
||||
unsigned ms_mode = NVC0_3D_MULTISAMPLE_MODE_MS1;
|
||||
unsigned nr_cbufs = fb->nr_cbufs;
|
||||
bool serialize = false;
|
||||
+ bool cbuf_is_linear = false;
|
||||
|
||||
nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_3D_FB);
|
||||
|
||||
@@ -203,8 +204,7 @@ nvc0_validate_fb(struct nvc0_context *nv
|
||||
PUSH_DATA(push, 0);
|
||||
|
||||
nvc0_resource_fence(nvc0, res, NOUVEAU_BO_WR);
|
||||
-
|
||||
- assert(!fb->zsbuf);
|
||||
+ cbuf_is_linear = true;
|
||||
}
|
||||
|
||||
if (res->status & NOUVEAU_BUFFER_STATUS_GPU_READING)
|
||||
@@ -216,7 +216,7 @@ nvc0_validate_fb(struct nvc0_context *nv
|
||||
BCTX_REFN(nvc0->bufctx_3d, 3D_FB, res, WR);
|
||||
}
|
||||
|
||||
- if (fb->zsbuf) {
|
||||
+ if (fb->zsbuf && !cbuf_is_linear) {
|
||||
struct nv50_miptree *mt = nv50_miptree(fb->zsbuf->texture);
|
||||
struct nv50_surface *sf = nv50_surface(fb->zsbuf);
|
||||
int unk = mt->base.base.target == PIPE_TEXTURE_2D;
|
@ -1,11 +0,0 @@
|
||||
diff -up mesa-22.3.3/src/gallium/drivers/radeonsi/driinfo_radeonsi.h.dma mesa-22.3.3/src/gallium/drivers/radeonsi/driinfo_radeonsi.h
|
||||
--- mesa-22.3.3/src/gallium/drivers/radeonsi/driinfo_radeonsi.h.dma 2023-01-25 06:17:54.993167334 +1000
|
||||
+++ mesa-22.3.3/src/gallium/drivers/radeonsi/driinfo_radeonsi.h 2023-01-25 06:17:57.363203425 +1000
|
||||
@@ -1,7 +1,6 @@
|
||||
// DriConf options specific to radeonsi
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
-DRI_CONF_MESA_GLTHREAD(true)
|
||||
DRI_CONF_SECTION_END
|
||||
|
||||
DRI_CONF_SECTION_DEBUG
|
736
SOURCES/raspberrypi-2712D0.patch
Normal file
736
SOURCES/raspberrypi-2712D0.patch
Normal file
@ -0,0 +1,736 @@
|
||||
From 646544da9e3b50cc72b963fe9693c979dbbbf636 Mon Sep 17 00:00:00 2001
|
||||
From: Iago Toral Quiroga <itoral@igalia.com>
|
||||
Date: Tue, 14 May 2024 09:40:16 +0200
|
||||
Subject: [PATCH 1/3] broadcom/cle: fix up shader record for V3D 7.1.10 /
|
||||
2712D0
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29189>
|
||||
(cherry picked from commit 7b807c3e948398da96293c6252c57505e11c74c9)
|
||||
---
|
||||
src/broadcom/cle/v3d_packet.xml | 63 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 63 insertions(+)
|
||||
|
||||
diff --git a/src/broadcom/cle/v3d_packet.xml b/src/broadcom/cle/v3d_packet.xml
|
||||
index 09dde392fac..4763b891aab 100644
|
||||
--- a/src/broadcom/cle/v3d_packet.xml
|
||||
+++ b/src/broadcom/cle/v3d_packet.xml
|
||||
@@ -1211,6 +1211,69 @@
|
||||
<field name="Coordinate Shader Uniforms Address" size="32" start="28b" type="address"/>
|
||||
</struct>
|
||||
|
||||
+ <!-- This one is exclusive to 2712D0 (V3D 7.1.10) -->
|
||||
+ <struct name="GL Shader State Record Draw Index" min_ver="71">
|
||||
+ <field name="Point size in shaded vertex data" size="1" start="0" type="bool"/>
|
||||
+ <field name="Enable clipping" size="1" start="1" type="bool"/>
|
||||
+
|
||||
+ <field name="Vertex ID read by coordinate shader" size="1" start="2" type="bool"/>
|
||||
+ <field name="Instance ID read by coordinate shader" size="1" start="3" type="bool"/>
|
||||
+ <field name="Base Instance ID read by coordinate shader" size="1" start="4" type="bool"/>
|
||||
+ <field name="cs_basevertex" size="1" start="5" type="bool"/>
|
||||
+ <field name="cs_drawindex" size="1" start="6" type="bool"/>
|
||||
+
|
||||
+ <field name="Vertex ID read by vertex shader" size="1" start="7" type="bool"/>
|
||||
+ <field name="Instance ID read by vertex shader" size="1" start="8" type="bool"/>
|
||||
+ <field name="Base Instance ID read by vertex shader" size="1" start="9" type="bool"/>
|
||||
+ <field name="vs_basevertex" size="1" start="10" type="bool"/>
|
||||
+ <field name="vs_drawindex" size="1" start="11" type="bool"/>
|
||||
+
|
||||
+ <field name="Fragment shader does Z writes" size="1" start="12" type="bool"/>
|
||||
+ <field name="Turn off early-z test" size="1" start="13" type="bool"/>
|
||||
+
|
||||
+ <field name="Fragment shader uses real pixel centre W in addition to centroid W2" size="1" start="15" type="bool"/>
|
||||
+ <field name="Enable Sample Rate Shading" size="1" start="16" type="bool"/>
|
||||
+ <field name="Any shader reads hardware-written Primitive ID" size="1" start="17" type="bool"/>
|
||||
+ <field name="Insert Primitive ID as first varying to fragment shader" size="1" start="18" type="bool"/>
|
||||
+ <field name="Turn off scoreboard" size="1" start="19" type="bool"/>
|
||||
+ <field name="Do scoreboard wait on first thread switch" size="1" start="20" type="bool"/>
|
||||
+ <field name="Disable implicit point/line varyings" size="1" start="21" type="bool"/>
|
||||
+ <field name="No prim pack" size="1" start="22" type="bool"/>
|
||||
+ <field name="Never defer FEP depth writes" size="1" start="23" type="bool"/>
|
||||
+
|
||||
+ <field name="Number of varyings in Fragment Shader" size="8" start="3b" type="uint"/>
|
||||
+
|
||||
+ <field name="Coordinate Shader output VPM segment size" size="4" start="4b" type="uint"/>
|
||||
+ <field name="Min Coord Shader output segments required in play in addition to VCM cache size" size="4" start="36" type="uint"/>
|
||||
+
|
||||
+ <field name="Coordinate Shader input VPM segment size" size="4" start="5b" type="uint"/>
|
||||
+ <field name="Min Coord Shader input segments required in play" size="4" start="44" type="uint" minus_one="true"/>
|
||||
+
|
||||
+ <field name="Vertex Shader output VPM segment size" size="4" start="6b" type="uint"/>
|
||||
+ <field name="Min Vertex Shader output segments required in play in addition to VCM cache size" size="4" start="52" type="uint"/>
|
||||
+
|
||||
+ <field name="Vertex Shader input VPM segment size" size="4" start="7b" type="uint"/>
|
||||
+ <field name="Min Vertex Shader input segments required in play" size="4" start="60" type="uint" minus_one="true"/>
|
||||
+
|
||||
+ <field name="Fragment Shader Code Address" size="29" start="67" type="address"/>
|
||||
+ <field name="Fragment Shader 4-way threadable" size="1" start="64" type="bool"/>
|
||||
+ <field name="Fragment Shader start in final thread section" size="1" start="65" type="bool"/>
|
||||
+ <field name="Fragment Shader Propagate NaNs" size="1" start="66" type="bool"/>
|
||||
+ <field name="Fragment Shader Uniforms Address" size="32" start="12b" type="address"/>
|
||||
+
|
||||
+ <field name="Vertex Shader Code Address" size="29" start="131" type="address"/>
|
||||
+ <field name="Vertex Shader 4-way threadable" size="1" start="128" type="bool"/>
|
||||
+ <field name="Vertex Shader start in final thread section" size="1" start="129" type="bool"/>
|
||||
+ <field name="Vertex Shader Propagate NaNs" size="1" start="130" type="bool"/>
|
||||
+ <field name="Vertex Shader Uniforms Address" size="32" start="20b" type="address"/>
|
||||
+
|
||||
+ <field name="Coordinate Shader Code Address" size="29" start="195" type="address"/>
|
||||
+ <field name="Coordinate Shader 4-way threadable" size="1" start="192" type="bool"/>
|
||||
+ <field name="Coordinate Shader start in final thread section" size="1" start="193" type="bool"/>
|
||||
+ <field name="Coordinate Shader Propagate NaNs" size="1" start="194" type="bool"/>
|
||||
+ <field name="Coordinate Shader Uniforms Address" size="32" start="28b" type="address"/>
|
||||
+ </struct>
|
||||
+
|
||||
<struct name="Geometry Shader State Record">
|
||||
<field name="Geometry Bin Mode Shader Code Address" size="29" start="3" type="address"/>
|
||||
<field name="Geometry Bin Mode Shader 4-way threadable" size="1" start="0" type="bool"/>
|
||||
--
|
||||
2.49.0
|
||||
|
||||
From 576044e52be2c504ef011029015ecce1b95744b6 Mon Sep 17 00:00:00 2001
|
||||
From: Iago Toral Quiroga <itoral@igalia.com>
|
||||
Date: Tue, 14 May 2024 10:24:07 +0200
|
||||
Subject: [PATCH 2/3] v3d: support 2712D0
|
||||
|
||||
2710D0 has V3D 7.1.10 which included draw index and
|
||||
base vertex in the shader state record packet, shuffling
|
||||
the locations of most of its fields. Handle this at run
|
||||
time by emitting the appropriate packet based on the
|
||||
V3D version since our current versoning framework doesn't
|
||||
support changes based on revision number alone.
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29189>
|
||||
(cherry picked from commit 1fc846dce396e2e0d1be23568e22ae2510df71bd)
|
||||
---
|
||||
src/broadcom/common/v3d_device_info.h | 6 +
|
||||
src/gallium/drivers/v3d/v3dx_draw.c | 354 +++++++++++++++++---------
|
||||
2 files changed, 233 insertions(+), 127 deletions(-)
|
||||
|
||||
diff --git a/src/broadcom/common/v3d_device_info.h b/src/broadcom/common/v3d_device_info.h
|
||||
index 8dfc7858727..0df25e8dcce 100644
|
||||
--- a/src/broadcom/common/v3d_device_info.h
|
||||
+++ b/src/broadcom/common/v3d_device_info.h
|
||||
@@ -52,4 +52,10 @@ typedef int (*v3d_ioctl_fun)(int fd, unsigned long request, void *arg);
|
||||
bool
|
||||
v3d_get_device_info(int fd, struct v3d_device_info* devinfo, v3d_ioctl_fun fun);
|
||||
|
||||
+static inline bool
|
||||
+v3d_device_has_draw_index(struct v3d_device_info *devinfo)
|
||||
+{
|
||||
+ return devinfo->ver > 71 || (devinfo->ver == 71 && devinfo->rev >= 10);
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c
|
||||
index 6bcb5818fb4..754bd54f0b0 100644
|
||||
--- a/src/gallium/drivers/v3d/v3dx_draw.c
|
||||
+++ b/src/gallium/drivers/v3d/v3dx_draw.c
|
||||
@@ -471,6 +471,230 @@ v3d_emit_tes_gs_shader_params(struct v3d_job *job,
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+emit_shader_state_record(struct v3d_context *v3d,
|
||||
+ struct v3d_job *job,
|
||||
+ const struct pipe_draw_info *info,
|
||||
+ struct v3d_vertex_stateobj *vtx,
|
||||
+ struct v3d_cl_reloc cs_uniforms,
|
||||
+ struct v3d_cl_reloc vs_uniforms,
|
||||
+ struct v3d_cl_reloc fs_uniforms,
|
||||
+ struct vpm_config *vpm_cfg_bin,
|
||||
+ struct vpm_config *vpm_cfg)
|
||||
+{
|
||||
+#if V3D_VERSION >= 71
|
||||
+ /* 2712D0 (V3D 7.1.10) has included draw index and base vertex,
|
||||
+ * shuffling all the fields in the packet. Since the versioning
|
||||
+ * framework doesn't handle revision numbers, the XML has a
|
||||
+ * different shader state record packet including the new fields
|
||||
+ * and we decide at run time which packet we need to emit.
|
||||
+ */
|
||||
+ if (v3d_device_has_draw_index(&v3d->screen->devinfo)) {
|
||||
+ cl_emit(&job->indirect, GL_SHADER_STATE_RECORD_DRAW_INDEX, shader) {
|
||||
+ shader.enable_clipping = true;
|
||||
+ shader.point_size_in_shaded_vertex_data =
|
||||
+ (info->mode == MESA_PRIM_POINTS &&
|
||||
+ v3d->rasterizer->base.point_size_per_vertex);
|
||||
+ shader.fragment_shader_does_z_writes =
|
||||
+ v3d->prog.fs->prog_data.fs->writes_z;
|
||||
+ shader.turn_off_early_z_test =
|
||||
+ v3d->prog.fs->prog_data.fs->disable_ez;
|
||||
+ shader.fragment_shader_uses_real_pixel_centre_w_in_addition_to_centroid_w2 =
|
||||
+ v3d->prog.fs->prog_data.fs->uses_center_w;
|
||||
+ shader.any_shader_reads_hardware_written_primitive_id =
|
||||
+ (v3d->prog.gs && v3d->prog.gs->prog_data.gs->uses_pid) ||
|
||||
+ v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
+ shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
+ !v3d->prog.gs && v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
+ shader.do_scoreboard_wait_on_first_thread_switch =
|
||||
+ v3d->prog.fs->prog_data.fs->lock_scoreboard_on_first_thrsw;
|
||||
+ shader.disable_implicit_point_line_varyings =
|
||||
+ !v3d->prog.fs->prog_data.fs->uses_implicit_point_line_varyings;
|
||||
+ shader.number_of_varyings_in_fragment_shader =
|
||||
+ v3d->prog.fs->prog_data.fs->num_inputs;
|
||||
+ shader.coordinate_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.cs->resource)->bo,
|
||||
+ v3d->prog.cs->offset);
|
||||
+ shader.vertex_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.vs->resource)->bo,
|
||||
+ v3d->prog.vs->offset);
|
||||
+ shader.fragment_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.fs->resource)->bo,
|
||||
+ v3d->prog.fs->offset);
|
||||
+ shader.coordinate_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.cs->prog_data.vs->vpm_input_size;
|
||||
+ shader.vertex_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.vs->prog_data.vs->vpm_input_size;
|
||||
+ shader.coordinate_shader_output_vpm_segment_size =
|
||||
+ v3d->prog.cs->prog_data.vs->vpm_output_size;
|
||||
+ shader.vertex_shader_output_vpm_segment_size =
|
||||
+ v3d->prog.vs->prog_data.vs->vpm_output_size;
|
||||
+ shader.coordinate_shader_uniforms_address = cs_uniforms;
|
||||
+ shader.vertex_shader_uniforms_address = vs_uniforms;
|
||||
+ shader.fragment_shader_uniforms_address = fs_uniforms;
|
||||
+ shader.min_coord_shader_input_segments_required_in_play =
|
||||
+ vpm_cfg_bin->As;
|
||||
+ shader.min_vertex_shader_input_segments_required_in_play =
|
||||
+ vpm_cfg->As;
|
||||
+ shader.min_coord_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ vpm_cfg_bin->Ve;
|
||||
+ shader.min_vertex_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ vpm_cfg->Ve;
|
||||
+ shader.coordinate_shader_4_way_threadable =
|
||||
+ v3d->prog.cs->prog_data.vs->base.threads == 4;
|
||||
+ shader.vertex_shader_4_way_threadable =
|
||||
+ v3d->prog.vs->prog_data.vs->base.threads == 4;
|
||||
+ shader.fragment_shader_4_way_threadable =
|
||||
+ v3d->prog.fs->prog_data.fs->base.threads == 4;
|
||||
+ shader.coordinate_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.cs->prog_data.vs->base.single_seg;
|
||||
+ shader.vertex_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.vs->prog_data.vs->base.single_seg;
|
||||
+ shader.fragment_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.fs->prog_data.fs->base.single_seg;
|
||||
+ shader.vertex_id_read_by_coordinate_shader =
|
||||
+ v3d->prog.cs->prog_data.vs->uses_vid;
|
||||
+ shader.instance_id_read_by_coordinate_shader =
|
||||
+ v3d->prog.cs->prog_data.vs->uses_iid;
|
||||
+ shader.vertex_id_read_by_vertex_shader =
|
||||
+ v3d->prog.vs->prog_data.vs->uses_vid;
|
||||
+ shader.instance_id_read_by_vertex_shader =
|
||||
+ v3d->prog.vs->prog_data.vs->uses_iid;
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ assert(!v3d_device_has_draw_index(&v3d->screen->devinfo));
|
||||
+ cl_emit(&job->indirect, GL_SHADER_STATE_RECORD, shader) {
|
||||
+ shader.enable_clipping = true;
|
||||
+ /* V3D_DIRTY_PRIM_MODE | V3D_DIRTY_RASTERIZER */
|
||||
+ shader.point_size_in_shaded_vertex_data =
|
||||
+ (info->mode == MESA_PRIM_POINTS &&
|
||||
+ v3d->rasterizer->base.point_size_per_vertex);
|
||||
+
|
||||
+ /* Must be set if the shader modifies Z, discards, or modifies
|
||||
+ * the sample mask. For any of these cases, the fragment
|
||||
+ * shader needs to write the Z value (even just discards).
|
||||
+ */
|
||||
+ shader.fragment_shader_does_z_writes =
|
||||
+ v3d->prog.fs->prog_data.fs->writes_z;
|
||||
+
|
||||
+ /* Set if the EZ test must be disabled (due to shader side
|
||||
+ * effects and the early_z flag not being present in the
|
||||
+ * shader).
|
||||
+ */
|
||||
+ shader.turn_off_early_z_test =
|
||||
+ v3d->prog.fs->prog_data.fs->disable_ez;
|
||||
+
|
||||
+ shader.fragment_shader_uses_real_pixel_centre_w_in_addition_to_centroid_w2 =
|
||||
+ v3d->prog.fs->prog_data.fs->uses_center_w;
|
||||
+
|
||||
+ shader.any_shader_reads_hardware_written_primitive_id =
|
||||
+ (v3d->prog.gs && v3d->prog.gs->prog_data.gs->uses_pid) ||
|
||||
+ v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
+ shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
+ !v3d->prog.gs && v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
+
|
||||
+ shader.do_scoreboard_wait_on_first_thread_switch =
|
||||
+ v3d->prog.fs->prog_data.fs->lock_scoreboard_on_first_thrsw;
|
||||
+ shader.disable_implicit_point_line_varyings =
|
||||
+ !v3d->prog.fs->prog_data.fs->uses_implicit_point_line_varyings;
|
||||
+
|
||||
+ shader.number_of_varyings_in_fragment_shader =
|
||||
+ v3d->prog.fs->prog_data.fs->num_inputs;
|
||||
+
|
||||
+ shader.coordinate_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.cs->resource)->bo,
|
||||
+ v3d->prog.cs->offset);
|
||||
+ shader.vertex_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.vs->resource)->bo,
|
||||
+ v3d->prog.vs->offset);
|
||||
+ shader.fragment_shader_code_address =
|
||||
+ cl_address(v3d_resource(v3d->prog.fs->resource)->bo,
|
||||
+ v3d->prog.fs->offset);
|
||||
+
|
||||
+#if V3D_VERSION == 42
|
||||
+ shader.coordinate_shader_propagate_nans = true;
|
||||
+ shader.vertex_shader_propagate_nans = true;
|
||||
+ shader.fragment_shader_propagate_nans = true;
|
||||
+
|
||||
+ /* XXX: Use combined input/output size flag in the common
|
||||
+ * case.
|
||||
+ */
|
||||
+ shader.coordinate_shader_has_separate_input_and_output_vpm_blocks =
|
||||
+ v3d->prog.cs->prog_data.vs->separate_segments;
|
||||
+ shader.vertex_shader_has_separate_input_and_output_vpm_blocks =
|
||||
+ v3d->prog.vs->prog_data.vs->separate_segments;
|
||||
+ shader.coordinate_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.cs->prog_data.vs->separate_segments ?
|
||||
+ v3d->prog.cs->prog_data.vs->vpm_input_size : 1;
|
||||
+ shader.vertex_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.vs->prog_data.vs->separate_segments ?
|
||||
+ v3d->prog.vs->prog_data.vs->vpm_input_size : 1;
|
||||
+#endif
|
||||
+ /* On V3D 7.1 there isn't a specific flag to set if we are using
|
||||
+ * shared/separate segments or not. We just set the value of
|
||||
+ * vpm_input_size to 0, and set output to the max needed. That should be
|
||||
+ * already properly set on prog_data_vs_bin
|
||||
+ */
|
||||
+#if V3D_VERSION == 71
|
||||
+ shader.coordinate_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.cs->prog_data.vs->vpm_input_size;
|
||||
+ shader.vertex_shader_input_vpm_segment_size =
|
||||
+ v3d->prog.vs->prog_data.vs->vpm_input_size;
|
||||
+#endif
|
||||
+
|
||||
+ shader.coordinate_shader_output_vpm_segment_size =
|
||||
+ v3d->prog.cs->prog_data.vs->vpm_output_size;
|
||||
+ shader.vertex_shader_output_vpm_segment_size =
|
||||
+ v3d->prog.vs->prog_data.vs->vpm_output_size;
|
||||
+
|
||||
+ shader.coordinate_shader_uniforms_address = cs_uniforms;
|
||||
+ shader.vertex_shader_uniforms_address = vs_uniforms;
|
||||
+ shader.fragment_shader_uniforms_address = fs_uniforms;
|
||||
+
|
||||
+ shader.min_coord_shader_input_segments_required_in_play =
|
||||
+ vpm_cfg_bin->As;
|
||||
+ shader.min_vertex_shader_input_segments_required_in_play =
|
||||
+ vpm_cfg->As;
|
||||
+
|
||||
+ shader.min_coord_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ vpm_cfg_bin->Ve;
|
||||
+ shader.min_vertex_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ vpm_cfg->Ve;
|
||||
+
|
||||
+ shader.coordinate_shader_4_way_threadable =
|
||||
+ v3d->prog.cs->prog_data.vs->base.threads == 4;
|
||||
+ shader.vertex_shader_4_way_threadable =
|
||||
+ v3d->prog.vs->prog_data.vs->base.threads == 4;
|
||||
+ shader.fragment_shader_4_way_threadable =
|
||||
+ v3d->prog.fs->prog_data.fs->base.threads == 4;
|
||||
+
|
||||
+ shader.coordinate_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.cs->prog_data.vs->base.single_seg;
|
||||
+ shader.vertex_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.vs->prog_data.vs->base.single_seg;
|
||||
+ shader.fragment_shader_start_in_final_thread_section =
|
||||
+ v3d->prog.fs->prog_data.fs->base.single_seg;
|
||||
+
|
||||
+ shader.vertex_id_read_by_coordinate_shader =
|
||||
+ v3d->prog.cs->prog_data.vs->uses_vid;
|
||||
+ shader.instance_id_read_by_coordinate_shader =
|
||||
+ v3d->prog.cs->prog_data.vs->uses_iid;
|
||||
+ shader.vertex_id_read_by_vertex_shader =
|
||||
+ v3d->prog.vs->prog_data.vs->uses_vid;
|
||||
+ shader.instance_id_read_by_vertex_shader =
|
||||
+ v3d->prog.vs->prog_data.vs->uses_iid;
|
||||
+
|
||||
+#if V3D_VERSION == 42
|
||||
+ shader.address_of_default_attribute_values =
|
||||
+ cl_address(v3d_resource(vtx->defaults)->bo,
|
||||
+ vtx->defaults_offset);
|
||||
+#endif
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
v3d_emit_gl_shader_state(struct v3d_context *v3d,
|
||||
const struct pipe_draw_info *info)
|
||||
@@ -580,133 +804,9 @@ v3d_emit_gl_shader_state(struct v3d_context *v3d,
|
||||
vpm_cfg.Gv);
|
||||
}
|
||||
|
||||
- cl_emit(&job->indirect, GL_SHADER_STATE_RECORD, shader) {
|
||||
- shader.enable_clipping = true;
|
||||
- /* V3D_DIRTY_PRIM_MODE | V3D_DIRTY_RASTERIZER */
|
||||
- shader.point_size_in_shaded_vertex_data =
|
||||
- (info->mode == MESA_PRIM_POINTS &&
|
||||
- v3d->rasterizer->base.point_size_per_vertex);
|
||||
-
|
||||
- /* Must be set if the shader modifies Z, discards, or modifies
|
||||
- * the sample mask. For any of these cases, the fragment
|
||||
- * shader needs to write the Z value (even just discards).
|
||||
- */
|
||||
- shader.fragment_shader_does_z_writes =
|
||||
- v3d->prog.fs->prog_data.fs->writes_z;
|
||||
-
|
||||
- /* Set if the EZ test must be disabled (due to shader side
|
||||
- * effects and the early_z flag not being present in the
|
||||
- * shader).
|
||||
- */
|
||||
- shader.turn_off_early_z_test =
|
||||
- v3d->prog.fs->prog_data.fs->disable_ez;
|
||||
-
|
||||
- shader.fragment_shader_uses_real_pixel_centre_w_in_addition_to_centroid_w2 =
|
||||
- v3d->prog.fs->prog_data.fs->uses_center_w;
|
||||
-
|
||||
- shader.any_shader_reads_hardware_written_primitive_id =
|
||||
- (v3d->prog.gs && v3d->prog.gs->prog_data.gs->uses_pid) ||
|
||||
- v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
- shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
- !v3d->prog.gs && v3d->prog.fs->prog_data.fs->uses_pid;
|
||||
-
|
||||
- shader.do_scoreboard_wait_on_first_thread_switch =
|
||||
- v3d->prog.fs->prog_data.fs->lock_scoreboard_on_first_thrsw;
|
||||
- shader.disable_implicit_point_line_varyings =
|
||||
- !v3d->prog.fs->prog_data.fs->uses_implicit_point_line_varyings;
|
||||
-
|
||||
- shader.number_of_varyings_in_fragment_shader =
|
||||
- v3d->prog.fs->prog_data.fs->num_inputs;
|
||||
-
|
||||
- shader.coordinate_shader_code_address =
|
||||
- cl_address(v3d_resource(v3d->prog.cs->resource)->bo,
|
||||
- v3d->prog.cs->offset);
|
||||
- shader.vertex_shader_code_address =
|
||||
- cl_address(v3d_resource(v3d->prog.vs->resource)->bo,
|
||||
- v3d->prog.vs->offset);
|
||||
- shader.fragment_shader_code_address =
|
||||
- cl_address(v3d_resource(v3d->prog.fs->resource)->bo,
|
||||
- v3d->prog.fs->offset);
|
||||
-
|
||||
-#if V3D_VERSION == 42
|
||||
- shader.coordinate_shader_propagate_nans = true;
|
||||
- shader.vertex_shader_propagate_nans = true;
|
||||
- shader.fragment_shader_propagate_nans = true;
|
||||
-
|
||||
- /* XXX: Use combined input/output size flag in the common
|
||||
- * case.
|
||||
- */
|
||||
- shader.coordinate_shader_has_separate_input_and_output_vpm_blocks =
|
||||
- v3d->prog.cs->prog_data.vs->separate_segments;
|
||||
- shader.vertex_shader_has_separate_input_and_output_vpm_blocks =
|
||||
- v3d->prog.vs->prog_data.vs->separate_segments;
|
||||
- shader.coordinate_shader_input_vpm_segment_size =
|
||||
- v3d->prog.cs->prog_data.vs->separate_segments ?
|
||||
- v3d->prog.cs->prog_data.vs->vpm_input_size : 1;
|
||||
- shader.vertex_shader_input_vpm_segment_size =
|
||||
- v3d->prog.vs->prog_data.vs->separate_segments ?
|
||||
- v3d->prog.vs->prog_data.vs->vpm_input_size : 1;
|
||||
-#endif
|
||||
- /* On V3D 7.1 there isn't a specific flag to set if we are using
|
||||
- * shared/separate segments or not. We just set the value of
|
||||
- * vpm_input_size to 0, and set output to the max needed. That should be
|
||||
- * already properly set on prog_data_vs_bin
|
||||
- */
|
||||
-#if V3D_VERSION == 71
|
||||
- shader.coordinate_shader_input_vpm_segment_size =
|
||||
- v3d->prog.cs->prog_data.vs->vpm_input_size;
|
||||
- shader.vertex_shader_input_vpm_segment_size =
|
||||
- v3d->prog.vs->prog_data.vs->vpm_input_size;
|
||||
-#endif
|
||||
-
|
||||
- shader.coordinate_shader_output_vpm_segment_size =
|
||||
- v3d->prog.cs->prog_data.vs->vpm_output_size;
|
||||
- shader.vertex_shader_output_vpm_segment_size =
|
||||
- v3d->prog.vs->prog_data.vs->vpm_output_size;
|
||||
-
|
||||
- shader.coordinate_shader_uniforms_address = cs_uniforms;
|
||||
- shader.vertex_shader_uniforms_address = vs_uniforms;
|
||||
- shader.fragment_shader_uniforms_address = fs_uniforms;
|
||||
-
|
||||
- shader.min_coord_shader_input_segments_required_in_play =
|
||||
- vpm_cfg_bin.As;
|
||||
- shader.min_vertex_shader_input_segments_required_in_play =
|
||||
- vpm_cfg.As;
|
||||
-
|
||||
- shader.min_coord_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
- vpm_cfg_bin.Ve;
|
||||
- shader.min_vertex_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
- vpm_cfg.Ve;
|
||||
-
|
||||
- shader.coordinate_shader_4_way_threadable =
|
||||
- v3d->prog.cs->prog_data.vs->base.threads == 4;
|
||||
- shader.vertex_shader_4_way_threadable =
|
||||
- v3d->prog.vs->prog_data.vs->base.threads == 4;
|
||||
- shader.fragment_shader_4_way_threadable =
|
||||
- v3d->prog.fs->prog_data.fs->base.threads == 4;
|
||||
-
|
||||
- shader.coordinate_shader_start_in_final_thread_section =
|
||||
- v3d->prog.cs->prog_data.vs->base.single_seg;
|
||||
- shader.vertex_shader_start_in_final_thread_section =
|
||||
- v3d->prog.vs->prog_data.vs->base.single_seg;
|
||||
- shader.fragment_shader_start_in_final_thread_section =
|
||||
- v3d->prog.fs->prog_data.fs->base.single_seg;
|
||||
-
|
||||
- shader.vertex_id_read_by_coordinate_shader =
|
||||
- v3d->prog.cs->prog_data.vs->uses_vid;
|
||||
- shader.instance_id_read_by_coordinate_shader =
|
||||
- v3d->prog.cs->prog_data.vs->uses_iid;
|
||||
- shader.vertex_id_read_by_vertex_shader =
|
||||
- v3d->prog.vs->prog_data.vs->uses_vid;
|
||||
- shader.instance_id_read_by_vertex_shader =
|
||||
- v3d->prog.vs->prog_data.vs->uses_iid;
|
||||
-
|
||||
-#if V3D_VERSION == 42
|
||||
- shader.address_of_default_attribute_values =
|
||||
- cl_address(v3d_resource(vtx->defaults)->bo,
|
||||
- vtx->defaults_offset);
|
||||
-#endif
|
||||
- }
|
||||
+ emit_shader_state_record(v3d, job, info, vtx,
|
||||
+ cs_uniforms, vs_uniforms, fs_uniforms,
|
||||
+ &vpm_cfg_bin, &vpm_cfg);
|
||||
|
||||
bool cs_loaded_any = false;
|
||||
const bool cs_uses_builtins = v3d->prog.cs->prog_data.vs->uses_iid ||
|
||||
--
|
||||
2.49.0
|
||||
|
||||
From de2176a6688d036abdfd6d2a13d4aa9834cf870c Mon Sep 17 00:00:00 2001
|
||||
From: Iago Toral Quiroga <itoral@igalia.com>
|
||||
Date: Thu, 23 Nov 2023 11:33:57 +0100
|
||||
Subject: [PATCH 3/3] v3dv: support 2712D0
|
||||
|
||||
2712D0 has V3D 7.1.10 which included draw index and
|
||||
base vertex in the shader state record packet, shuffling
|
||||
the locations of most of its fields. Handle this at run
|
||||
time by emitting the appropriate packet based on the
|
||||
V3D version since our current versioning framework doesn't
|
||||
support changes based on revision number alone.
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29189>
|
||||
(cherry picked from commit b545e78f12b02069fa363a4a7ef749a996ea3c4b)
|
||||
---
|
||||
src/broadcom/vulkan/v3dvx_cmd_buffer.c | 94 +++++++++++++++++---------
|
||||
src/broadcom/vulkan/v3dvx_pipeline.c | 75 +++++++++++++++++---
|
||||
2 files changed, 129 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/src/broadcom/vulkan/v3dvx_cmd_buffer.c b/src/broadcom/vulkan/v3dvx_cmd_buffer.c
|
||||
index 1b511408bfe..1b9d02e126c 100644
|
||||
--- a/src/broadcom/vulkan/v3dvx_cmd_buffer.c
|
||||
+++ b/src/broadcom/vulkan/v3dvx_cmd_buffer.c
|
||||
@@ -2343,6 +2343,13 @@ v3dX(cmd_buffer_emit_gl_shader_state)(struct v3dv_cmd_buffer *cmd_buffer)
|
||||
|
||||
uint32_t shader_state_record_length =
|
||||
cl_packet_length(GL_SHADER_STATE_RECORD);
|
||||
+#if V3D_VERSION >= 71
|
||||
+ if (v3d_device_has_draw_index(&pipeline->device->devinfo)) {
|
||||
+ shader_state_record_length =
|
||||
+ cl_packet_length(GL_SHADER_STATE_RECORD_DRAW_INDEX);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (pipeline->has_gs) {
|
||||
shader_state_record_length +=
|
||||
cl_packet_length(GEOMETRY_SHADER_STATE_RECORD) +
|
||||
@@ -2390,39 +2397,64 @@ v3dX(cmd_buffer_emit_gl_shader_state)(struct v3dv_cmd_buffer *cmd_buffer)
|
||||
pipeline->device->default_attribute_float;
|
||||
#endif
|
||||
|
||||
- cl_emit_with_prepacked(&job->indirect, GL_SHADER_STATE_RECORD,
|
||||
- pipeline->shader_state_record, shader) {
|
||||
-
|
||||
- /* FIXME: we are setting this values here and during the
|
||||
- * prepacking. This is because both cl_emit_with_prepacked and v3dvx_pack
|
||||
- * asserts for minimum values of these. It would be good to get
|
||||
- * v3dvx_pack to assert on the final value if possible
|
||||
- */
|
||||
- shader.min_coord_shader_input_segments_required_in_play =
|
||||
- pipeline->vpm_cfg_bin.As;
|
||||
- shader.min_vertex_shader_input_segments_required_in_play =
|
||||
- pipeline->vpm_cfg.As;
|
||||
-
|
||||
- shader.coordinate_shader_code_address =
|
||||
- v3dv_cl_address(assembly_bo, vs_bin_variant->assembly_offset);
|
||||
- shader.vertex_shader_code_address =
|
||||
- v3dv_cl_address(assembly_bo, vs_variant->assembly_offset);
|
||||
- shader.fragment_shader_code_address =
|
||||
- v3dv_cl_address(assembly_bo, fs_variant->assembly_offset);
|
||||
-
|
||||
- shader.coordinate_shader_uniforms_address = cmd_buffer->state.uniforms.vs_bin;
|
||||
- shader.vertex_shader_uniforms_address = cmd_buffer->state.uniforms.vs;
|
||||
- shader.fragment_shader_uniforms_address = cmd_buffer->state.uniforms.fs;
|
||||
-
|
||||
-#if V3D_VERSION == 42
|
||||
- shader.address_of_default_attribute_values =
|
||||
- v3dv_cl_address(default_attribute_values, 0);
|
||||
+#if V3D_VERSION >= 71
|
||||
+ if (v3d_device_has_draw_index(&pipeline->device->devinfo)) {
|
||||
+ cl_emit_with_prepacked(&job->indirect, GL_SHADER_STATE_RECORD_DRAW_INDEX,
|
||||
+ pipeline->shader_state_record, shader) {
|
||||
+ shader.min_coord_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg_bin.As;
|
||||
+ shader.min_vertex_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg.As;
|
||||
+ shader.coordinate_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, vs_bin_variant->assembly_offset);
|
||||
+ shader.vertex_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, vs_variant->assembly_offset);
|
||||
+ shader.fragment_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, fs_variant->assembly_offset);
|
||||
+ shader.coordinate_shader_uniforms_address = cmd_buffer->state.uniforms.vs_bin;
|
||||
+ shader.vertex_shader_uniforms_address = cmd_buffer->state.uniforms.vs;
|
||||
+ shader.fragment_shader_uniforms_address = cmd_buffer->state.uniforms.fs;
|
||||
+ shader.any_shader_reads_hardware_written_primitive_id =
|
||||
+ (pipeline->has_gs && prog_data_gs->uses_pid) || prog_data_fs->uses_pid;
|
||||
+ shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
+ !pipeline->has_gs && prog_data_fs->uses_pid;
|
||||
+ }
|
||||
+ } else
|
||||
#endif
|
||||
+ {
|
||||
+ cl_emit_with_prepacked(&job->indirect, GL_SHADER_STATE_RECORD,
|
||||
+ pipeline->shader_state_record, shader) {
|
||||
+ /* FIXME: we are setting this values here and during the
|
||||
+ * prepacking. This is because both cl_emit_with_prepacked and v3dvx_pack
|
||||
+ * asserts for minimum values of these. It would be good to get
|
||||
+ * v3dvx_pack to assert on the final value if possible
|
||||
+ */
|
||||
+ shader.min_coord_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg_bin.As;
|
||||
+ shader.min_vertex_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg.As;
|
||||
|
||||
- shader.any_shader_reads_hardware_written_primitive_id =
|
||||
- (pipeline->has_gs && prog_data_gs->uses_pid) || prog_data_fs->uses_pid;
|
||||
- shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
- !pipeline->has_gs && prog_data_fs->uses_pid;
|
||||
+ shader.coordinate_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, vs_bin_variant->assembly_offset);
|
||||
+ shader.vertex_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, vs_variant->assembly_offset);
|
||||
+ shader.fragment_shader_code_address =
|
||||
+ v3dv_cl_address(assembly_bo, fs_variant->assembly_offset);
|
||||
+
|
||||
+ shader.coordinate_shader_uniforms_address = cmd_buffer->state.uniforms.vs_bin;
|
||||
+ shader.vertex_shader_uniforms_address = cmd_buffer->state.uniforms.vs;
|
||||
+ shader.fragment_shader_uniforms_address = cmd_buffer->state.uniforms.fs;
|
||||
+
|
||||
+ #if V3D_VERSION == 42
|
||||
+ shader.address_of_default_attribute_values =
|
||||
+ v3dv_cl_address(default_attribute_values, 0);
|
||||
+ #endif
|
||||
+
|
||||
+ shader.any_shader_reads_hardware_written_primitive_id =
|
||||
+ (pipeline->has_gs && prog_data_gs->uses_pid) || prog_data_fs->uses_pid;
|
||||
+ shader.insert_primitive_id_as_first_varying_to_fragment_shader =
|
||||
+ !pipeline->has_gs && prog_data_fs->uses_pid;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Upload vertex element attributes (SHADER_STATE_ATTRIBUTE_RECORD) */
|
||||
diff --git a/src/broadcom/vulkan/v3dvx_pipeline.c b/src/broadcom/vulkan/v3dvx_pipeline.c
|
||||
index 5ae0d2597b0..ad66374289e 100644
|
||||
--- a/src/broadcom/vulkan/v3dvx_pipeline.c
|
||||
+++ b/src/broadcom/vulkan/v3dvx_pipeline.c
|
||||
@@ -394,6 +394,10 @@ v3dX(pipeline_pack_state)(struct v3dv_pipeline *pipeline,
|
||||
static void
|
||||
pack_shader_state_record(struct v3dv_pipeline *pipeline)
|
||||
{
|
||||
+ /* To siplify the code we ignore here GL_SHADER_STATE_RECORD_DRAW_INDEX
|
||||
+ * used with 2712D0, since we know that has the same size as the regular
|
||||
+ * version.
|
||||
+ */
|
||||
assert(sizeof(pipeline->shader_state_record) >=
|
||||
cl_packet_length(GL_SHADER_STATE_RECORD));
|
||||
|
||||
@@ -406,6 +410,14 @@ pack_shader_state_record(struct v3dv_pipeline *pipeline)
|
||||
struct v3d_vs_prog_data *prog_data_vs_bin =
|
||||
pipeline->shared_data->variants[BROADCOM_SHADER_VERTEX_BIN]->prog_data.vs;
|
||||
|
||||
+ bool point_size_in_shaded_vertex_data;
|
||||
+ if (!pipeline->has_gs) {
|
||||
+ point_size_in_shaded_vertex_data = pipeline->topology == MESA_PRIM_POINTS;
|
||||
+ } else {
|
||||
+ struct v3d_gs_prog_data *prog_data_gs =
|
||||
+ pipeline->shared_data->variants[BROADCOM_SHADER_GEOMETRY]->prog_data.gs;
|
||||
+ point_size_in_shaded_vertex_data = prog_data_gs->writes_psiz;
|
||||
+ }
|
||||
|
||||
/* Note: we are not packing addresses, as we need the job (see
|
||||
* cl_pack_emit_reloc). Additionally uniforms can't be filled up at this
|
||||
@@ -413,17 +425,62 @@ pack_shader_state_record(struct v3dv_pipeline *pipeline)
|
||||
* pipeline (like viewport), . Would need to be filled later, so we are
|
||||
* doing a partial prepacking.
|
||||
*/
|
||||
+#if V3D_VERSION >= 71
|
||||
+ /* 2712D0 (V3D 7.1.10) has included draw index and base vertex, shuffling all
|
||||
+ * the fields in the packet. Since the versioning framework doesn't handle
|
||||
+ * revision numbers, the XML has a different shader state record packet
|
||||
+ * including the new fields and we device at run time which packet we need
|
||||
+ * to emit.
|
||||
+ */
|
||||
+ if (v3d_device_has_draw_index(&pipeline->device->devinfo)) {
|
||||
+ v3dvx_pack(pipeline->shader_state_record, GL_SHADER_STATE_RECORD_DRAW_INDEX, shader) {
|
||||
+ shader.enable_clipping = true;
|
||||
+ shader.point_size_in_shaded_vertex_data = point_size_in_shaded_vertex_data;
|
||||
+ shader.fragment_shader_does_z_writes = prog_data_fs->writes_z;
|
||||
+ shader.turn_off_early_z_test = prog_data_fs->disable_ez;
|
||||
+ shader.fragment_shader_uses_real_pixel_centre_w_in_addition_to_centroid_w2 =
|
||||
+ prog_data_fs->uses_center_w;
|
||||
+ shader.enable_sample_rate_shading =
|
||||
+ pipeline->sample_rate_shading ||
|
||||
+ (pipeline->msaa && prog_data_fs->force_per_sample_msaa);
|
||||
+ shader.any_shader_reads_hardware_written_primitive_id = false;
|
||||
+ shader.do_scoreboard_wait_on_first_thread_switch =
|
||||
+ prog_data_fs->lock_scoreboard_on_first_thrsw;
|
||||
+ shader.disable_implicit_point_line_varyings =
|
||||
+ !prog_data_fs->uses_implicit_point_line_varyings;
|
||||
+ shader.number_of_varyings_in_fragment_shader = prog_data_fs->num_inputs;
|
||||
+ shader.coordinate_shader_input_vpm_segment_size = prog_data_vs_bin->vpm_input_size;
|
||||
+ shader.vertex_shader_input_vpm_segment_size = prog_data_vs->vpm_input_size;
|
||||
+ shader.coordinate_shader_output_vpm_segment_size = prog_data_vs_bin->vpm_output_size;
|
||||
+ shader.vertex_shader_output_vpm_segment_size = prog_data_vs->vpm_output_size;
|
||||
+ shader.min_coord_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg_bin.As;
|
||||
+ shader.min_vertex_shader_input_segments_required_in_play =
|
||||
+ pipeline->vpm_cfg.As;
|
||||
+ shader.min_coord_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ pipeline->vpm_cfg_bin.Ve;
|
||||
+ shader.min_vertex_shader_output_segments_required_in_play_in_addition_to_vcm_cache_size =
|
||||
+ pipeline->vpm_cfg.Ve;
|
||||
+ shader.coordinate_shader_4_way_threadable = prog_data_vs_bin->base.threads == 4;
|
||||
+ shader.vertex_shader_4_way_threadable = prog_data_vs->base.threads == 4;
|
||||
+ shader.fragment_shader_4_way_threadable = prog_data_fs->base.threads == 4;
|
||||
+ shader.coordinate_shader_start_in_final_thread_section = prog_data_vs_bin->base.single_seg;
|
||||
+ shader.vertex_shader_start_in_final_thread_section = prog_data_vs->base.single_seg;
|
||||
+ shader.fragment_shader_start_in_final_thread_section = prog_data_fs->base.single_seg;
|
||||
+ shader.vertex_id_read_by_coordinate_shader = prog_data_vs_bin->uses_vid;
|
||||
+ shader.base_instance_id_read_by_coordinate_shader = prog_data_vs_bin->uses_biid;
|
||||
+ shader.instance_id_read_by_coordinate_shader = prog_data_vs_bin->uses_iid;
|
||||
+ shader.vertex_id_read_by_vertex_shader = prog_data_vs->uses_vid;
|
||||
+ shader.base_instance_id_read_by_vertex_shader = prog_data_vs->uses_biid;
|
||||
+ shader.instance_id_read_by_vertex_shader = prog_data_vs->uses_iid;
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
v3dvx_pack(pipeline->shader_state_record, GL_SHADER_STATE_RECORD, shader) {
|
||||
shader.enable_clipping = true;
|
||||
-
|
||||
- if (!pipeline->has_gs) {
|
||||
- shader.point_size_in_shaded_vertex_data =
|
||||
- pipeline->topology == MESA_PRIM_POINTS;
|
||||
- } else {
|
||||
- struct v3d_gs_prog_data *prog_data_gs =
|
||||
- pipeline->shared_data->variants[BROADCOM_SHADER_GEOMETRY]->prog_data.gs;
|
||||
- shader.point_size_in_shaded_vertex_data = prog_data_gs->writes_psiz;
|
||||
- }
|
||||
+ shader.point_size_in_shaded_vertex_data = point_size_in_shaded_vertex_data;
|
||||
|
||||
/* Must be set if the shader modifies Z, discards, or modifies
|
||||
* the sample mask. For any of these cases, the fragment
|
||||
--
|
||||
2.49.0
|
||||
|
@ -1,20 +0,0 @@
|
||||
#include "vl_decoder.h"
|
||||
bool
|
||||
vl_profile_supported(struct pipe_screen *screen, enum pipe_video_profile profile,
|
||||
enum pipe_video_entrypoint entrypoint)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
vl_level_supported(struct pipe_screen *screen, enum pipe_video_profile profile)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct pipe_video_codec *
|
||||
vl_create_decoder(struct pipe_context *pipe,
|
||||
const struct pipe_video_codec *templat)
|
||||
{
|
||||
return NULL;
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
#include "vl_mpeg12_decoder.h"
|
||||
struct pipe_video_codec *
|
||||
vl_create_mpeg12_decoder(struct pipe_context *context,
|
||||
const struct pipe_video_codec *templat)
|
||||
{
|
||||
return NULL;
|
||||
}
|
1379
SPECS/mesa.spec
1379
SPECS/mesa.spec
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user