iris: fix decode_get_bo callback
[mesa.git] / src / gallium / drivers / swr / swr_resource.h
index 87a27acfbce8eccffbd6c23542714c5500bf9338..12694332addd590f20bf2a893a8b24876f9d2115 100644 (file)
 
 struct sw_displaytarget;
 
+enum swr_resource_status {
+   SWR_RESOURCE_UNUSED = 0x0,
+   SWR_RESOURCE_READ = 0x1,
+   SWR_RESOURCE_WRITE = 0x2,
+};
+
 struct swr_resource {
    struct pipe_resource base;
 
    bool has_depth;
    bool has_stencil;
 
-   UINT alignedWidth;
-   UINT alignedHeight;
-
    SWR_SURFACE_STATE swr;
-   SWR_SURFACE_STATE secondary; // for faking depth/stencil merged formats
+   SWR_SURFACE_STATE secondary; /* for faking depth/stencil merged formats */
 
    struct sw_displaytarget *display_target;
 
-   unsigned row_stride[PIPE_MAX_TEXTURE_LEVELS];
-   unsigned img_stride[PIPE_MAX_TEXTURE_LEVELS];
-   unsigned mip_offsets[PIPE_MAX_TEXTURE_LEVELS];
+   /* If resource is multisample, then this points to a alternate resource
+    * containing the resolved multisample surface, otherwise null */
+   struct pipe_resource *resolve_target;
+
+   size_t mip_offsets[PIPE_MAX_TEXTURE_LEVELS];
+   size_t secondary_mip_offsets[PIPE_MAX_TEXTURE_LEVELS];
+
+   enum swr_resource_status status;
 
-   /* Opaque pointer to swr_context to mark resource in use */
-   void *bound_to_context;
+   /* last pipe that used (validated) this resource */
+   struct pipe_context *curr_pipe;
 };
 
 
@@ -80,18 +88,57 @@ swr_resource_is_texture(const struct pipe_resource *resource)
 }
 
 
-static INLINE void *
+static INLINE uint8_t *
 swr_resource_data(struct pipe_resource *resource)
 {
    struct swr_resource *swr_r = swr_resource(resource);
 
    assert(!swr_resource_is_texture(resource));
 
-   return swr_r->swr.pBaseAddress;
+   return (uint8_t*)(swr_r->swr.xpBaseAddress);
 }
 
 
-void swr_store_render_target(struct swr_context *ctx,
+void swr_invalidate_render_target(struct pipe_context *pipe,
+                                  uint32_t attachment,
+                                  uint16_t width, uint16_t height);
+
+void swr_store_render_target(struct pipe_context *pipe,
                              uint32_t attachment,
                              enum SWR_TILE_STATE post_tile_state);
+
+void swr_store_dirty_resource(struct pipe_context *pipe,
+                              struct pipe_resource *resource,
+                              enum SWR_TILE_STATE post_tile_state);
+
+void swr_update_resource_status(struct pipe_context *,
+                                const struct pipe_draw_info *);
+
+/*
+ * Functions to indicate a resource's in-use status.
+ */
+static INLINE enum
+swr_resource_status & operator|=(enum swr_resource_status & a,
+                                 enum swr_resource_status  b) {
+   return (enum swr_resource_status &)((int&)a |= (int)b);
+}
+
+static INLINE void
+swr_resource_read(struct pipe_resource *resource)
+{
+   swr_resource(resource)->status |= SWR_RESOURCE_READ;
+}
+
+static INLINE void
+swr_resource_write(struct pipe_resource *resource)
+{
+   swr_resource(resource)->status |= SWR_RESOURCE_WRITE;
+}
+
+static INLINE void
+swr_resource_unused(struct pipe_resource *resource)
+{
+   swr_resource(resource)->status = SWR_RESOURCE_UNUSED;
+}
+
 #endif