freedreno: add resource tracking support for written buffers
[mesa.git] / src / gallium / drivers / freedreno / freedreno_resource.h
index 1539fc9ad1a86e2169a7af9e72e571348e4bc4ad..e7f127edca4f0ac8e24e601eb5291f6bdd19519d 100644 (file)
@@ -29,7 +29,8 @@
 #ifndef FREEDRENO_RESOURCE_H_
 #define FREEDRENO_RESOURCE_H_
 
-#include "util/u_double_list.h"
+#include "util/list.h"
+#include "util/u_range.h"
 #include "util/u_transfer.h"
 
 #include "freedreno_util.h"
@@ -67,18 +68,34 @@ struct fd_resource {
        uint32_t layer_size;
        struct fd_resource_slice slices[MAX_MIP_LEVELS];
        uint32_t timestamp;
-       bool dirty, reading;
+       bool dirty, reading, writing;
+       /* buffer range that has been initialized */
+       struct util_range valid_buffer_range;
+
+       /* reference to the resource holding stencil data for a z32_s8 texture */
+       struct fd_resource *stencil;
 
        struct list_head list;
 };
 
-static INLINE struct fd_resource *
+static inline struct fd_resource *
 fd_resource(struct pipe_resource *ptex)
 {
        return (struct fd_resource *)ptex;
 }
 
-static INLINE struct fd_resource_slice *
+struct fd_transfer {
+       struct pipe_transfer base;
+       void *staging;
+};
+
+static inline struct fd_transfer *
+fd_transfer(struct pipe_transfer *ptrans)
+{
+       return (struct fd_transfer *)ptrans;
+}
+
+static inline struct fd_resource_slice *
 fd_resource_slice(struct fd_resource *rsc, unsigned level)
 {
        assert(level <= rsc->base.b.last_level);
@@ -86,7 +103,7 @@ fd_resource_slice(struct fd_resource *rsc, unsigned level)
 }
 
 /* get offset for specified mipmap level and texture/array layer */
-static INLINE uint32_t
+static inline uint32_t
 fd_resource_offset(struct fd_resource *rsc, unsigned level, unsigned layer)
 {
        struct fd_resource_slice *slice = fd_resource_slice(rsc, level);