summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérôme Glisse <jglisse@redhat.com>2018-08-09 15:32:01 -0400
committerJérôme Glisse <jglisse@redhat.com>2018-08-09 15:38:12 -0400
commit0f509bdaf0ca9f53546659e62cef6e607c24968c (patch)
tree0307ff8ce3593f087a50dd0f16f16e09db23af5c
parent90f56420ae21d196c64a80cbf2caa8870b9a8615 (diff)
nouveau: add support for SVM migratenouveau_nir_spirv_opencl_v5
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
-rw-r--r--src/gallium/drivers/nouveau/nvc0/nvc0_context.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
index 2e4490b8d9..ad6d269864 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
@@ -28,6 +28,40 @@
#include "nvc0/nvc0_screen.h"
#include "nvc0/nvc0_resource.h"
+
+#include "xf86drm.h"
+#include "nouveau_drm.h"
+
+struct drm_nouveau_svm_migrate {
+ __u64 addr;
+ __u64 size;
+};
+
+#define DRM_NOUVEAU_SVM_MIGRATE 0x09
+
+static void
+nvc0_svm_migrate(struct pipe_context *pipe, unsigned num_ptrs,
+ const void **ptrs, const size_t *sizes,
+ uint64_t flags)
+{
+ struct nvc0_context *nvc0 = nvc0_context(pipe);
+ struct nouveau_screen *screen = &nvc0->screen->base;
+ int fd = screen->drm->fd;
+ unsigned i;
+
+ for (i = 0; i < num_ptrs; i++) {
+ struct drm_nouveau_svm_migrate args = {
+ .addr = (unsigned long)ptrs[i],
+ .size = sizes[i],
+ };
+
+ /* This is best effort, so no garanty whatsoever */
+ drmCommandWrite(fd, DRM_NOUVEAU_SVM_MIGRATE,
+ &args, sizeof(args));
+ }
+}
+
+
static void
nvc0_flush(struct pipe_context *pipe,
struct pipe_fence_handle **fence,
@@ -399,6 +433,8 @@ nvc0_create(struct pipe_screen *pscreen, void *priv, unsigned ctxflags)
pipe->launch_grid = (nvc0->screen->base.class_3d >= NVE4_3D_CLASS) ?
nve4_launch_grid : nvc0_launch_grid;
+ pipe->svm_migrate = nvc0_svm_migrate;
+
pipe->flush = nvc0_flush;
pipe->texture_barrier = nvc0_texture_barrier;
pipe->memory_barrier = nvc0_memory_barrier;