radeonsi/gfx10: update a tunable max_es_verts_base for NGG
[mesa.git] / src / gallium / drivers / panfrost / pan_allocate.h
index 2084a339552141941159faa79535db5b1533a40a..8d925ee38a4c9c2842c1ce02e92631ff2536a7c3 100644 (file)
 #include <unistd.h>
 #include <sys/mman.h>
 #include <stdbool.h>
-#include "pipebuffer/pb_slab.h"
 
 #include <panfrost-misc.h>
 
-struct panfrost_context;
-
-/* Texture memory */
-
-#define HEAP_TEXTURE 0
-
-/* Single-frame (transient) command stream memory, done at the block scale
- * rather than the individual cmdstream alllocation scale. We use pb_alloc for
- * pooling, but we have to implement our own logic atop the API for performance
- * reasons when considering many low-latency tiny heterogenous allocations */
+#include "util/list.h"
 
-#define HEAP_TRANSIENT 1
-
-/* Multi-frame descriptor memory (replaces what used to be
- * cmdstream_persistent), for long-living small allocations */
-
-#define HEAP_DESCRIPTOR 2
+struct panfrost_context;
 
 /* Represents a fat pointer for GPU-mapped memory, returned from the transient
  * allocator and not used for much else */
@@ -58,42 +43,32 @@ struct panfrost_transfer {
         mali_ptr gpu;
 };
 
-struct panfrost_memory {
-        /* Subclassing slab object */
-        struct pb_slab slab;
+struct panfrost_bo {
+        /* Must be first for casting */
+        struct list_head link;
 
-        /* Backing for the slab in memory */
-        uint8_t *cpu;
-        mali_ptr gpu;
-        int stack_bottom;
-        size_t size;
-};
+        struct pipe_reference reference;
 
-/* Slab entry sizes range from 2^min to 2^max. In this case, we range from 1k
- * to 16MB. Numbers are kind of arbitrary but these seem to work alright in
- * practice. */
-
-#define MIN_SLAB_ENTRY_SIZE (10)
-#define MAX_SLAB_ENTRY_SIZE (24)
+        /* Mapping for the entire object (all levels) */
+        uint8_t *cpu;
 
-struct panfrost_memory_entry {
-        /* Subclass */
-        struct pb_slab_entry base;
+        /* GPU address for the object */
+        mali_ptr gpu;
 
-        /* Have we been freed? */
-        bool freed;
+        /* Size of all entire trees */
+        size_t size;
 
-        /* Offset into the slab of the entry */
-        off_t offset;
+        int gem_handle;
 };
 
-/* Functions for replay */
-mali_ptr pandev_upload(int cheating_offset, int *stack_bottom, mali_ptr base, void *base_map, const void *data, size_t sz, bool no_pad);
-mali_ptr pandev_upload_sequential(mali_ptr base, void *base_map, const void *data, size_t sz);
+struct panfrost_memory {
+        /* Backing for the slab in memory */
+        struct panfrost_bo *bo;
+        int stack_bottom;
+};
 
 /* Functions for the actual Galliumish driver */
-mali_ptr panfrost_upload(struct panfrost_memory *mem, const void *data, size_t sz, bool no_pad);
-mali_ptr panfrost_upload_sequential(struct panfrost_memory *mem, const void *data, size_t sz);
+mali_ptr panfrost_upload(struct panfrost_memory *mem, const void *data, size_t sz);
 
 struct panfrost_transfer
 panfrost_allocate_transient(struct panfrost_context *ctx, size_t sz);
@@ -101,23 +76,11 @@ panfrost_allocate_transient(struct panfrost_context *ctx, size_t sz);
 mali_ptr
 panfrost_upload_transient(struct panfrost_context *ctx, const void *data, size_t sz);
 
-void *
-panfrost_allocate_transfer(struct panfrost_memory *mem, size_t sz, mali_ptr *gpu);
-
 static inline mali_ptr
 panfrost_reserve(struct panfrost_memory *mem, size_t sz)
 {
         mem->stack_bottom += sz;
-        return mem->gpu + (mem->stack_bottom - sz);
+        return mem->bo->gpu + (mem->stack_bottom - sz);
 }
 
-struct panfrost_transfer
-panfrost_allocate_chunk(struct panfrost_context *ctx, size_t size, unsigned heap_id);
-
-#include <math.h>
-#define inff INFINITY
-
-#define R(...) #__VA_ARGS__
-#define ALIGN(x, y) (((x) + ((y) - 1)) & ~((y) - 1))
-
 #endif /* __PAN_ALLOCATE_H__ */