Merge remote branch 'origin/master' into gallium_draw_llvm
[mesa.git] / src / gallium / drivers / i965 / brw_winsys.h
index 2da660a1e6eb3904364664301b1da832d9e63628..f30c7f181323fb0d5cedf364149c613f57a9ee32 100644 (file)
@@ -27,8 +27,8 @@
 #define BRW_WINSYS_H
 
 #include "pipe/p_compiler.h"
-#include "pipe/p_error.h"
-#include "pipe/p_refcnt.h"
+#include "pipe/p_defines.h"
+#include "util/u_inlines.h"
 
 struct brw_winsys;
 struct pipe_fence_handle;
@@ -54,7 +54,7 @@ struct brw_winsys_buffer {
 enum brw_buffer_type
 {
    BRW_BUFFER_TYPE_TEXTURE,
-   BRW_BUFFER_TYPE_SCANOUT, /**< a texture used for scanning out from */
+   BRW_BUFFER_TYPE_SCANOUT,          /**< a texture used for scanning out from */
    BRW_BUFFER_TYPE_VERTEX,
    BRW_BUFFER_TYPE_CURBE,
    BRW_BUFFER_TYPE_QUERY,
@@ -63,9 +63,9 @@ enum brw_buffer_type
    BRW_BUFFER_TYPE_BATCH,
    BRW_BUFFER_TYPE_GENERAL_STATE,
    BRW_BUFFER_TYPE_SURFACE_STATE,
-   BRW_BUFFER_TYPE_PIXEL,       /* image uploads, pbo's, etc */
-   BRW_BUFFER_TYPE_GENERIC,     /* unknown */
-   BRW_BUFFER_TYPE_MAX         /* Count of possible values */
+   BRW_BUFFER_TYPE_PIXEL,            /* image uploads, pbo's, etc */
+   BRW_BUFFER_TYPE_GENERIC,          /* unknown */
+   BRW_BUFFER_TYPE_MAX               /* Count of possible values */
 };
 
 
@@ -74,14 +74,14 @@ enum brw_buffer_type
  */
 enum brw_buffer_usage {
    BRW_USAGE_STATE,         /* INSTRUCTION, 0 */
-   BRW_USAGE_QUERY_RESULT,      /* INSTRUCTION, INSTRUCTION */
+   BRW_USAGE_QUERY_RESULT,  /* INSTRUCTION, INSTRUCTION */
    BRW_USAGE_RENDER_TARGET, /* RENDER,      0 */
-   BRW_USAGE_DEPTH_BUFFER,      /* RENDER,      RENDER */
-   BRW_USAGE_BLIT_SOURCE,       /* RENDER,      0 */
+   BRW_USAGE_DEPTH_BUFFER,  /* RENDER,      RENDER */
+   BRW_USAGE_BLIT_SOURCE,   /* RENDER,      0 */
    BRW_USAGE_BLIT_DEST,     /* RENDER,      RENDER */
-   BRW_USAGE_SAMPLER,   /* SAMPLER,     0 */
-   BRW_USAGE_VERTEX,    /* VERTEX,      0 */
-   BRW_USAGE_SCRATCH,   /* 0,           0 */
+   BRW_USAGE_SAMPLER,       /* SAMPLER,     0 */
+   BRW_USAGE_VERTEX,        /* VERTEX,      0 */
+   BRW_USAGE_SCRATCH,       /* 0,           0 */
    BRW_USAGE_MAX
 };
 
@@ -111,6 +111,13 @@ enum brw_buffer_data_type {
 };
 
 
+/* Matches the i915_drm definitions:
+ */
+#define BRW_TILING_NONE  0
+#define BRW_TILING_X     1
+#define BRW_TILING_Y     2
+
+
 /* Relocations to be applied with subdata in a call to sws->bo_subdata, below.
  *
  * Effectively this encodes:
@@ -124,11 +131,11 @@ struct brw_winsys_reloc {
    struct brw_winsys_buffer *bo;
 };
 
-static INLINE void make_reloc( struct brw_winsys_reloc *reloc,
-                               enum brw_buffer_usage usage,
-                               unsigned delta,
-                               unsigned offset,
-                               struct brw_winsys_buffer *bo)
+static INLINE void make_reloc(struct brw_winsys_reloc *reloc,
+                              enum brw_buffer_usage usage,
+                              unsigned delta,
+                              unsigned offset,
+                              struct brw_winsys_buffer *bo)
 {
    reloc->usage = usage;
    reloc->delta = delta;
@@ -149,27 +156,37 @@ struct brw_winsys_screen {
    /**
     * Create a buffer.
     */
-   enum pipe_error (*bo_alloc)( struct brw_winsys_screen *sws,
-                                enum brw_buffer_type type,
-                                unsigned size,
-                                unsigned alignment,
-                                struct brw_winsys_buffer **bo_out );
+   enum pipe_error (*bo_alloc)(struct brw_winsys_screen *sws,
+                               enum brw_buffer_type type,
+                               unsigned size,
+                               unsigned alignment,
+                               struct brw_winsys_buffer **bo_out);
+
+   enum pipe_error (*bo_from_handle)(struct brw_winsys_screen *sws,
+                                     struct winsys_handle *whandle,
+                                     unsigned *stride,
+                                     unsigned *tiling,
+                                     struct brw_winsys_buffer **bo_out);
+
+   enum pipe_error (*bo_get_handle)(struct brw_winsys_buffer *buffer,
+                                    struct winsys_handle *whandle,
+                                    unsigned stride);
 
    /* Destroy a buffer when our refcount goes to zero:
     */
-   void (*bo_destroy)( struct brw_winsys_buffer *buffer );
+   void (*bo_destroy)(struct brw_winsys_buffer *buffer);
 
    /* delta -- added to b2->offset, and written into buffer
     * offset -- location above value is written to within buffer
     */
-   enum pipe_error (*bo_emit_reloc)( struct brw_winsys_buffer *buffer,
-                                     enum brw_buffer_usage usage,
-                                     unsigned delta,
-                                     unsigned offset,
-                                     struct brw_winsys_buffer *b2);
+   enum pipe_error (*bo_emit_reloc)(struct brw_winsys_buffer *buffer,
+                                    enum brw_buffer_usage usage,
+                                    unsigned delta,
+                                    unsigned offset,
+                                    struct brw_winsys_buffer *b2);
 
-   enum pipe_error (*bo_exec)( struct brw_winsys_buffer *buffer,
-                               unsigned bytes_used );
+   enum pipe_error (*bo_exec)(struct brw_winsys_buffer *buffer,
+                              unsigned bytes_used);
 
    enum pipe_error (*bo_subdata)(struct brw_winsys_buffer *buffer,
                                  enum brw_buffer_data_type data_type,
@@ -181,14 +198,14 @@ struct brw_winsys_screen {
 
    boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
    boolean (*bo_references)(struct brw_winsys_buffer *a,
-                           struct brw_winsys_buffer *b);
+                            struct brw_winsys_buffer *b);
 
    /* XXX: couldn't this be handled by returning true/false on
     * bo_emit_reloc?
     */
-   enum pipe_error (*check_aperture_space)( struct brw_winsys_screen *iws,
-                                           struct brw_winsys_buffer **buffers,
-                                           unsigned count );
+   enum pipe_error (*check_aperture_space)(struct brw_winsys_screen *iws,
+                                           struct brw_winsys_buffer **buffers,
+                                           unsigned count);
 
    /**
     * Map a buffer.
@@ -199,11 +216,11 @@ struct brw_winsys_screen {
                    unsigned length,
                    boolean write,
                    boolean discard,
-                   boolean flush_explicit );
+                   boolean flush_explicit);
 
-   void (*bo_flush_range)( struct brw_winsys_buffer *buffer,
-                           unsigned offset,
-                           unsigned length );
+   void (*bo_flush_range)(struct brw_winsys_buffer *buffer,
+                          unsigned offset,
+                          unsigned length);
 
    /**
     * Unmap a buffer.
@@ -224,7 +241,7 @@ struct brw_winsys_screen {
 };
 
 static INLINE void *
-bo_map_read( struct brw_winsys_screen *sws, struct brw_winsys_buffer *buf )
+bo_map_read(struct brw_winsys_screen *sws, struct brw_winsys_buffer *buf)
 {
    return sws->bo_map( buf,
                        BRW_DATA_OTHER,
@@ -237,8 +254,10 @@ bo_reference(struct brw_winsys_buffer **ptr, struct brw_winsys_buffer *buf)
 {
    struct brw_winsys_buffer *old_buf = *ptr;
 
-   if (pipe_reference((struct pipe_reference **)ptr, &buf->reference))
+   if (pipe_reference(&(*ptr)->reference, &buf->reference))
       old_buf->sws->bo_destroy(old_buf);
+
+   *ptr = buf;
 }
 
 
@@ -247,33 +266,28 @@ bo_reference(struct brw_winsys_buffer **ptr, struct brw_winsys_buffer *buf)
  */
 struct pipe_screen *brw_create_screen(struct brw_winsys_screen *iws, unsigned pci_id);
 
-/**
- * Create a brw pipe_context.
- */
-struct pipe_context *brw_create_context(struct pipe_screen *screen);
 
-/**
- * Get the brw_winsys buffer backing the texture.
- *
- * TODO UGLY
- */
-struct pipe_texture;
-boolean brw_texture_get_winsys_buffer(struct pipe_texture *texture,
-                                     struct brw_winsys_buffer **buffer,
-                                     unsigned *stride);
 
-/**
- * Wrap a brw_winsys buffer with a texture blanket.
- *
- * TODO UGLY
+/*************************************************************************
+ * Cooperative dumping between winsys and driver.  TODO: make this
+ * driver-only by wrapping calls to winsys->bo_subdata().
  */
-struct pipe_texture * 
-brw_texture_blanket_winsys_buffer(struct pipe_screen *screen,
-                                 const struct pipe_texture *template,
-                                 const unsigned pitch,
-                                 struct brw_winsys_buffer *buffer);
-
 
+#ifdef DEBUG
+extern int BRW_DUMP;
+#else
+#define BRW_DUMP 0
+#endif 
+
+#define DUMP_ASM               0x1
+#define DUMP_STATE             0x2
+#define DUMP_BATCH             0x4
+
+void brw_dump_data( unsigned pci_id,
+                   enum brw_buffer_data_type data_type,
+                   unsigned offset,
+                   const void *data,
+                   size_t size );
 
 
 #endif