aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/panfrost/.gitignore1
-rw-r--r--src/gallium/drivers/panfrost/meson.build21
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c3
-rw-r--r--src/gallium/drivers/panfrost/pan_screen.c9
-rw-r--r--src/gallium/drivers/panfrost/pan_screen.h2
5 files changed, 29 insertions, 7 deletions
diff --git a/src/gallium/drivers/panfrost/.gitignore b/src/gallium/drivers/panfrost/.gitignore
new file mode 100644
index 00000000000..9d2c2c18bef
--- /dev/null
+++ b/src/gallium/drivers/panfrost/.gitignore
@@ -0,0 +1 @@
+nondrm
diff --git a/src/gallium/drivers/panfrost/meson.build b/src/gallium/drivers/panfrost/meson.build
index 9b90035d691..5e799eae119 100644
--- a/src/gallium/drivers/panfrost/meson.build
+++ b/src/gallium/drivers/panfrost/meson.build
@@ -39,7 +39,7 @@ files_panfrost = files(
'pan_blending.c',
'pan_blend_shaders.c',
'pan_wallpaper.c',
- 'pan_pretty_print.c'
+ 'pan_pretty_print.c',
)
inc_panfrost = [
@@ -53,6 +53,21 @@ inc_panfrost = [
include_directories('midgard'),
]
+compile_args_panfrost = [
+ '-DGALLIUM_PANFROST',
+ '-Wno-pointer-arith'
+]
+
+overlay = join_paths(meson.source_root(), meson.current_source_dir(), 'nondrm/pan_nondrm.c')
+nondrm_overlay_check = run_command('ls', overlay)
+has_nondrm_overlay = nondrm_overlay_check.returncode() == 0
+
+if has_nondrm_overlay
+ files_panfrost += files('nondrm/pan_nondrm.c')
+ inc_panfrost += include_directories('nondrm/include')
+ compile_args_panfrost += '-DPAN_NONDRM_OVERLAY'
+endif
+
midgard_nir_algebraic_c = custom_target(
'midgard_nir_algebraic.c',
input : 'midgard/midgard_nir_algebraic.py',
@@ -73,11 +88,11 @@ libpanfrost = static_library(
idep_nir
],
include_directories : inc_panfrost,
- c_args : [c_vis_args, c_msvc_compat_args],
+ c_args : [c_vis_args, c_msvc_compat_args, compile_args_panfrost],
)
driver_panfrost = declare_dependency(
- compile_args : ['-DGALLIUM_PANFROST', '-Wno-pointer-arith'],
+ compile_args : compile_args_panfrost,
link_with : [libpanfrost, libpanfrostwinsys],
)
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 0551d553182..fb4130362e0 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1431,7 +1431,8 @@ panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate)
#ifndef DRY_RUN
- int fragment_id = screen->driver->submit_vs_fs_job(ctx, has_draws);
+ bool is_scanout = panfrost_is_scanout(ctx);
+ int fragment_id = screen->driver->submit_vs_fs_job(ctx, has_draws, is_scanout);
/* If visual, we can stall a frame */
diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c
index d2ea5a692f5..5ee3b4c6006 100644
--- a/src/gallium/drivers/panfrost/pan_screen.c
+++ b/src/gallium/drivers/panfrost/pan_screen.c
@@ -50,7 +50,8 @@
#include "pan_context.h"
#include "midgard/midgard_compile.h"
-#include "pan_drm.h"
+struct panfrost_driver *panfrost_create_drm_driver(int fd);
+struct panfrost_driver *panfrost_create_nondrm_driver(int fd);
static const char *
panfrost_get_name(struct pipe_screen *screen)
@@ -539,8 +540,12 @@ panfrost_create_screen(int fd, struct renderonly *ro, bool is_drm)
if (is_drm) {
screen->driver = panfrost_create_drm_driver(fd);
} else {
- fprintf(stderr, "Legacy (non-DRM) drivers are not supported in upstream Mesa\n");
+#ifdef PAN_NONDRM_OVERLAY
+ screen->driver = panfrost_create_nondrm_driver(fd);
+#else
+ fprintf(stderr, "Legacy (non-DRM) operation requires out-of-tree overlay\n");
return NULL;
+#endif
}
#ifdef DUMP_PERFORMANCE_COUNTERS
diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h
index 4c8fe8dd720..59787c8017c 100644
--- a/src/gallium/drivers/panfrost/pan_screen.h
+++ b/src/gallium/drivers/panfrost/pan_screen.h
@@ -53,7 +53,7 @@ struct panfrost_driver {
void (*unmap_bo) (struct panfrost_context *ctx, struct pipe_transfer *transfer);
void (*destroy_bo) (struct panfrost_screen *screen, struct panfrost_bo *bo);
- int (*submit_vs_fs_job) (struct panfrost_context *ctx, bool has_draws);
+ int (*submit_vs_fs_job) (struct panfrost_context *ctx, bool has_draws, bool is_scanout);
void (*force_flush_fragment) (struct panfrost_context *ctx);
void (*allocate_slab) (struct panfrost_screen *screen,
struct panfrost_memory *mem,