radeon/winsys: add sparse buffer interface
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 7 Feb 2017 15:59:54 +0000 (16:59 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 5 Apr 2017 08:37:17 +0000 (10:37 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/radeon_winsys.h

index a19ece6634dc957367a6dee0dfb6472d724548ee..a63485175d7bad57e841f0b236f3b995f0adbb7c 100644 (file)
@@ -53,6 +53,7 @@ enum radeon_bo_flag { /* bitfield */
     RADEON_FLAG_CPU_ACCESS =    (1 << 1),
     RADEON_FLAG_NO_CPU_ACCESS = (1 << 2),
     RADEON_FLAG_HANDLE =        (1 << 3), /* the buffer most not be suballocated */
+    RADEON_FLAG_SPARSE =        (1 << 4),
 };
 
 enum radeon_bo_usage { /* bitfield */
@@ -66,6 +67,8 @@ enum radeon_bo_usage { /* bitfield */
     RADEON_USAGE_SYNCHRONIZED = 8
 };
 
+#define RADEON_SPARSE_PAGE_SIZE (64 * 1024)
+
 enum ring_type {
     RING_GFX = 0,
     RING_COMPUTE,
@@ -574,6 +577,20 @@ struct radeon_winsys {
                               unsigned slice_size,
                               struct winsys_handle *whandle);
 
+    /**
+     * Change the commitment of a (64KB-page aligned) region of the given
+     * sparse buffer.
+     *
+     * \warning There is no automatic synchronization with command submission.
+     *
+     * \note Only implemented by the amdgpu winsys.
+     *
+     * \return false on out of memory or other failure, true on success.
+     */
+    bool (*buffer_commit)(struct pb_buffer *buf,
+                          uint64_t offset, uint64_t size,
+                          bool commit);
+
     /**
      * Return the virtual address of a buffer.
      *