X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Fnouveau%2Fnouveau_buffer.h;h=3a33fae9ce2fa3fd668d52f9010945aca4fef60a;hb=71c30bd87ca5aa22a6c5bae611901d1376a436ad;hp=3b8ee72e72a3737deaa03fce804943549a0edf17;hpb=e6caafd9d7fbfcb5906d22be9d6a3c1714e078ac;p=mesa.git diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.h b/src/gallium/drivers/nouveau/nouveau_buffer.h index 3b8ee72e72a..3a33fae9ce2 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.h +++ b/src/gallium/drivers/nouveau/nouveau_buffer.h @@ -1,8 +1,9 @@ #ifndef __NOUVEAU_BUFFER_H__ #define __NOUVEAU_BUFFER_H__ +#include "util/u_range.h" #include "util/u_transfer.h" -#include "util/u_double_list.h" +#include "util/list.h" struct pipe_resource; struct nouveau_context; @@ -16,8 +17,11 @@ struct nouveau_bo; */ #define NOUVEAU_BUFFER_STATUS_GPU_READING (1 << 0) #define NOUVEAU_BUFFER_STATUS_GPU_WRITING (1 << 1) +#define NOUVEAU_BUFFER_STATUS_DIRTY (1 << 2) #define NOUVEAU_BUFFER_STATUS_USER_MEMORY (1 << 7) +#define NOUVEAU_BUFFER_STATUS_REALLOC_MASK NOUVEAU_BUFFER_STATUS_USER_MEMORY + /* Resources, if mapped into the GPU's address space, are guaranteed to * have constant virtual addresses (nv50+). * @@ -30,27 +34,33 @@ struct nv04_resource { uint64_t address; /* virtual address (nv50+) */ - uint8_t *data; + uint8_t *data; /* resource's contents, if domain == 0, or cached */ struct nouveau_bo *bo; - uint32_t offset; + uint32_t offset; /* offset into the data/bo */ uint8_t status; uint8_t domain; + uint16_t cb_bindings[6]; /* per-shader per-slot bindings */ + struct nouveau_fence *fence; struct nouveau_fence *fence_wr; struct nouveau_mm_allocation *mm; + + /* buffer range that has been initialized */ + struct util_range valid_buffer_range; }; void nouveau_buffer_release_gpu_storage(struct nv04_resource *); -boolean -nouveau_buffer_download(struct nouveau_context *, struct nv04_resource *, - unsigned start, unsigned size); +void +nouveau_copy_buffer(struct nouveau_context *, + struct nv04_resource *dst, unsigned dst_pos, + struct nv04_resource *src, unsigned src_pos, unsigned size); -boolean +bool nouveau_buffer_migrate(struct nouveau_context *, struct nv04_resource *, unsigned domain); @@ -58,20 +68,20 @@ void * nouveau_resource_map_offset(struct nouveau_context *, struct nv04_resource *, uint32_t offset, uint32_t flags); -static INLINE void +static inline void nouveau_resource_unmap(struct nv04_resource *res) { /* no-op */ } -static INLINE struct nv04_resource * +static inline struct nv04_resource * nv04_resource(struct pipe_resource *resource) { return (struct nv04_resource *)resource; } /* is resource mapped into the GPU's address space (i.e. VRAM or GART) ? */ -static INLINE boolean +static inline bool nouveau_resource_mapped_by_gpu(struct pipe_resource *resource) { return nv04_resource(resource)->domain != 0; @@ -85,10 +95,14 @@ struct pipe_resource * nouveau_user_buffer_create(struct pipe_screen *screen, void *ptr, unsigned bytes, unsigned usage); -boolean +bool nouveau_user_buffer_upload(struct nouveau_context *, struct nv04_resource *, unsigned base, unsigned size); +void +nouveau_buffer_invalidate(struct pipe_context *pipe, + struct pipe_resource *resource); + /* Copy data to a scratch buffer and return address & bo the data resides in. * Returns 0 on failure. */