amd,radeonsi: rename radeon_winsys_cs -> radeon_cmdbuf
[mesa.git] / src / gallium / winsys / radeon / drm / radeon_drm_cs.h
index 8056e72fc4181fdd56e9a65f53bf1e2bbddeee2a..75fb09bd0010fbea128b480117ca9fe2809214c4 100644 (file)
 
 struct radeon_bo_item {
     struct radeon_bo    *bo;
-    uint64_t            priority_usage;
+    union {
+        struct {
+            uint64_t    priority_usage;
+        } real;
+        struct {
+            unsigned    real_idx;
+        } slab;
+    } u;
 };
 
 struct radeon_cs_context {
@@ -44,21 +51,21 @@ struct radeon_cs_context {
     uint32_t                    flags[2];
 
     /* Buffers. */
-    unsigned                    nrelocs;
-    unsigned                    crelocs;
-    unsigned                    validated_crelocs;
+    unsigned                    max_relocs;
+    unsigned                    num_relocs;
+    unsigned                    num_validated_relocs;
     struct radeon_bo_item       *relocs_bo;
     struct drm_radeon_cs_reloc  *relocs;
-    uint64_t                    *priority_usage;
 
-    int                         reloc_indices_hashlist[4096];
+    unsigned                    num_slab_buffers;
+    unsigned                    max_slab_buffers;
+    struct radeon_bo_item       *slab_buffers;
 
-    uint64_t                    used_vram;
-    uint64_t                    used_gart;
+    int                         reloc_indices_hashlist[4096];
 };
 
 struct radeon_drm_cs {
-    struct radeon_winsys_cs base;
+    struct radeon_cmdbuf base;
     enum ring_type          ring_type;
 
     /* We flip between these two CS. While one is being consumed
@@ -78,18 +85,19 @@ struct radeon_drm_cs {
     void (*flush_cs)(void *ctx, unsigned flags, struct pipe_fence_handle **fence);
     void *flush_data;
 
-    pipe_semaphore flush_completed;
+    struct util_queue_fence flush_completed;
+    struct pipe_fence_handle *next_fence;
 };
 
 int radeon_lookup_buffer(struct radeon_cs_context *csc, struct radeon_bo *bo);
 
 static inline struct radeon_drm_cs *
-radeon_drm_cs(struct radeon_winsys_cs *base)
+radeon_drm_cs(struct radeon_cmdbuf *base)
 {
     return (struct radeon_drm_cs*)base;
 }
 
-static inline boolean
+static inline bool
 radeon_bo_is_referenced_by_cs(struct radeon_drm_cs *cs,
                               struct radeon_bo *bo)
 {
@@ -98,30 +106,33 @@ radeon_bo_is_referenced_by_cs(struct radeon_drm_cs *cs,
            (num_refs && radeon_lookup_buffer(cs->csc, bo) != -1);
 }
 
-static inline boolean
+static inline bool
 radeon_bo_is_referenced_by_cs_for_write(struct radeon_drm_cs *cs,
                                         struct radeon_bo *bo)
 {
     int index;
 
     if (!bo->num_cs_references)
-        return FALSE;
+        return false;
 
     index = radeon_lookup_buffer(cs->csc, bo);
     if (index == -1)
-        return FALSE;
+        return false;
+
+    if (!bo->handle)
+        index = cs->csc->slab_buffers[index].u.slab.real_idx;
 
     return cs->csc->relocs[index].write_domain != 0;
 }
 
-static inline boolean
+static inline bool
 radeon_bo_is_referenced_by_any_cs(struct radeon_bo *bo)
 {
     return bo->num_cs_references != 0;
 }
 
-void radeon_drm_cs_sync_flush(struct radeon_winsys_cs *rcs);
+void radeon_drm_cs_sync_flush(struct radeon_cmdbuf *rcs);
 void radeon_drm_cs_init_functions(struct radeon_drm_winsys *ws);
-void radeon_drm_cs_emit_ioctl_oneshot(struct radeon_drm_cs *cs, struct radeon_cs_context *csc);
+void radeon_drm_cs_emit_ioctl_oneshot(void *job, int thread_index);
 
 #endif