summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/panfrost/pan_drm.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/drivers/panfrost/pan_drm.c b/src/gallium/drivers/panfrost/pan_drm.c
index 68de1b178a3..dbf95a25232 100644
--- a/src/gallium/drivers/panfrost/pan_drm.c
+++ b/src/gallium/drivers/panfrost/pan_drm.c
@@ -88,9 +88,13 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
/* Kernel will fail (confusingly) with EPERM otherwise */
assert(size > 0);
+ unsigned translated_flags = 0;
+
+ /* TODO: translate flags to kernel flags, if the kernel supports */
+
struct drm_panfrost_create_bo create_bo = {
.size = size,
- .flags = flags,
+ .flags = translated_flags,
};
int ret;
@@ -104,8 +108,12 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
bo->gpu = create_bo.offset;
bo->gem_handle = create_bo.handle;
- // TODO map and unmap on demand?
- panfrost_drm_mmap_bo(screen, bo);
+ /* Only mmap now if we know we need to. For CPU-invisible buffers, we
+ * never map since we don't care about their contents; they're purely
+ * for GPU-internal use. */
+
+ if (!(flags & PAN_ALLOCATE_INVISIBLE))
+ panfrost_drm_mmap_bo(screen, bo);
pipe_reference_init(&bo->reference, 1);
return bo;
@@ -143,7 +151,7 @@ panfrost_drm_allocate_slab(struct panfrost_screen *screen,
// TODO cache allocations
// TODO properly handle errors
// TODO take into account extra_flags
- mem->bo = panfrost_drm_create_bo(screen, pages * 4096, 0);
+ mem->bo = panfrost_drm_create_bo(screen, pages * 4096, extra_flags);
mem->stack_bottom = 0;
}