anv: Add initial support for cube maps
[mesa.git] / src / vulkan / anv_gem.c
index 4ce857e2a5f28febf85547769c1d37ea97c15913..9d0d03320017d844ccbcbc2fca6e91f7b664db5e 100644 (file)
@@ -70,7 +70,7 @@ anv_gem_create(struct anv_device *device, size_t size)
 }
 
 void
-anv_gem_close(struct anv_device *device, int gem_handle)
+anv_gem_close(struct anv_device *device, uint32_t gem_handle)
 {
    struct drm_gem_close close;
 
@@ -84,7 +84,7 @@ anv_gem_close(struct anv_device *device, int gem_handle)
  */
 void*
 anv_gem_mmap(struct anv_device *device, uint32_t gem_handle,
-             uint64_t offset, uint64_t size)
+             uint64_t offset, uint64_t size, uint32_t flags)
 {
    struct drm_i915_gem_mmap gem_mmap;
    int ret;
@@ -94,10 +94,7 @@ anv_gem_mmap(struct anv_device *device, uint32_t gem_handle,
    gem_mmap.offset = offset;
    gem_mmap.size = size;
    VG_CLEAR(gem_mmap.addr_ptr);
-
-#ifdef I915_MMAP_WC
-   gem_mmap.flags = 0;
-#endif
+   gem_mmap.flags = flags;
 
    ret = anv_ioctl(device->fd, DRM_IOCTL_I915_GEM_MMAP, &gem_mmap);
    if (ret != 0) {
@@ -119,7 +116,7 @@ anv_gem_munmap(void *p, uint64_t size)
    munmap(p, size);
 }
 
-int
+uint32_t
 anv_gem_userptr(struct anv_device *device, void *mem, size_t size)
 {
    struct drm_i915_gem_userptr userptr;
@@ -137,11 +134,38 @@ anv_gem_userptr(struct anv_device *device, void *mem, size_t size)
    return userptr.handle;
 }
 
+int
+anv_gem_set_caching(struct anv_device *device,
+                    uint32_t gem_handle, uint32_t caching)
+{
+   struct drm_i915_gem_caching gem_caching;
+
+   VG_CLEAR(gem_caching);
+   gem_caching.handle = gem_handle;
+   gem_caching.caching = caching;
+
+   return anv_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &gem_caching);
+}
+
+int
+anv_gem_set_domain(struct anv_device *device, uint32_t gem_handle,
+                   uint32_t read_domains, uint32_t write_domain)
+{
+   struct drm_i915_gem_set_domain gem_set_domain;
+
+   VG_CLEAR(gem_set_domain);
+   gem_set_domain.handle = gem_handle;
+   gem_set_domain.read_domains = read_domains;
+   gem_set_domain.write_domain = write_domain;
+
+   return anv_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &gem_set_domain);
+}
+
 /**
  * On error, \a timeout_ns holds the remaining time.
  */
 int
-anv_gem_wait(struct anv_device *device, int gem_handle, int64_t *timeout_ns)
+anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns)
 {
    struct drm_i915_gem_wait wait;
    int ret;
@@ -166,7 +190,7 @@ anv_gem_execbuffer(struct anv_device *device,
 
 int
 anv_gem_set_tiling(struct anv_device *device,
-                   int gem_handle, uint32_t stride, uint32_t tiling)
+                   uint32_t gem_handle, uint32_t stride, uint32_t tiling)
 {
    struct drm_i915_gem_set_tiling set_tiling;
    int ret;
@@ -178,7 +202,7 @@ anv_gem_set_tiling(struct anv_device *device,
    do {
       VG_CLEAR(set_tiling);
       set_tiling.handle = gem_handle;
-      set_tiling.tiling_mode = I915_TILING_X;
+      set_tiling.tiling_mode = tiling;
       set_tiling.stride = stride;
 
       ret = ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_TILING, &set_tiling);
@@ -230,13 +254,13 @@ anv_gem_destroy_context(struct anv_device *device, int context)
 }
 
 int
-anv_gem_get_aperture(struct anv_physical_device *physical_dev, uint64_t *size)
+anv_gem_get_aperture(int fd, uint64_t *size)
 {
    struct drm_i915_gem_get_aperture aperture;
    int ret;
 
    VG_CLEAR(aperture);
-   ret = anv_ioctl(physical_dev->fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture);
+   ret = anv_ioctl(fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture);
    if (ret == -1)
       return -1;
 
@@ -246,7 +270,7 @@ anv_gem_get_aperture(struct anv_physical_device *physical_dev, uint64_t *size)
 }
 
 int
-anv_gem_handle_to_fd(struct anv_device *device, int gem_handle)
+anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle)
 {
    struct drm_prime_handle args;
    int ret;
@@ -262,7 +286,7 @@ anv_gem_handle_to_fd(struct anv_device *device, int gem_handle)
    return args.fd;
 }
 
-int
+uint32_t
 anv_gem_fd_to_handle(struct anv_device *device, int fd)
 {
    struct drm_prime_handle args;