diff options
author | Jérôme Glisse <jglisse@redhat.com> | 2018-08-09 15:32:01 -0400 |
---|---|---|
committer | Jérôme Glisse <jglisse@redhat.com> | 2018-08-09 15:38:12 -0400 |
commit | 0f509bdaf0ca9f53546659e62cef6e607c24968c (patch) | |
tree | 0307ff8ce3593f087a50dd0f16f16e09db23af5c | |
parent | 90f56420ae21d196c64a80cbf2caa8870b9a8615 (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.c | 36 |
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; |