winsys/drm: Handle circular dependencies in Makefile.egl.
[mesa.git] / src / gallium / drivers / i965 / brw_screen.h
index eafd8ddf77e53d4cd32ca2e81e7fc929c478361c..e0f3cd2a9fe28a6fb169586726500831448205a9 100644 (file)
@@ -32,6 +32,7 @@
 #include "pipe/p_screen.h"
 
 #include "brw_reg.h"
+#include "brw_structs.h"
 
 struct brw_winsys_screen;
 
@@ -44,6 +45,7 @@ struct brw_screen
    struct pipe_screen base;
    struct brw_chipset chipset;
    struct brw_winsys_screen *sws;
+   boolean no_tiling;
 };
 
 /**
@@ -59,12 +61,71 @@ struct brw_transfer
 struct brw_buffer
 {
    struct pipe_buffer base;
+
+   /* One of either bo or user_buffer will be non-null, depending on
+    * whether this is a hardware or user buffer.
+    */
    struct brw_winsys_buffer *bo;
+   void *user_buffer;
+
+   /* Mapped pointer??
+    */
    void *ptr;
-   boolean is_user_buffer;
 };
 
 
+union brw_surface_id {
+   struct {
+      unsigned face:3;
+      unsigned zslice:13;
+      unsigned level:16;
+   } bits;
+   unsigned value;
+};
+
+
+struct brw_surface
+{
+   struct pipe_surface base;
+   
+   union brw_surface_id id;
+   unsigned cpp;
+   unsigned pitch;
+   unsigned draw_offset;
+   unsigned tiling;
+
+   struct brw_surface_state ss;
+   struct brw_winsys_buffer *bo;
+   struct brw_surface *next, *prev;
+};
+
+
+#define BRW_MAX_TEXTURE_2D_LEVELS 11  /* max 1024x1024 */
+#define BRW_MAX_TEXTURE_3D_LEVELS  8  /* max 128x128x128 */
+
+
+struct brw_texture
+{
+   struct pipe_texture base;
+   struct brw_winsys_buffer *bo;
+   struct brw_surface_state ss;
+
+   unsigned *image_offset[BRW_MAX_TEXTURE_2D_LEVELS];
+   unsigned nr_images[BRW_MAX_TEXTURE_2D_LEVELS];
+   unsigned level_offset[BRW_MAX_TEXTURE_2D_LEVELS];
+
+   boolean compressed;
+   unsigned brw_target;
+   unsigned pitch;
+   unsigned tiling;
+   unsigned cpp;
+   unsigned total_height;
+
+   struct brw_surface views[2];
+};
+
+
+
 /*
  * Cast wrappers
  */
@@ -80,26 +141,62 @@ brw_transfer(struct pipe_transfer *transfer)
    return (struct brw_transfer *)transfer;
 }
 
+static INLINE struct brw_surface *
+brw_surface(struct pipe_surface *surface)
+{
+   return (struct brw_surface *)surface;
+}
+
 static INLINE struct brw_buffer *
 brw_buffer(struct pipe_buffer *buffer)
 {
    return (struct brw_buffer *)buffer;
 }
 
+static INLINE struct brw_texture *
+brw_texture(struct pipe_texture *texture)
+{
+   return (struct brw_texture *)texture;
+}
+
 
 /* Pipe buffer helpers
  */
 static INLINE boolean
 brw_buffer_is_user_buffer( const struct pipe_buffer *buf )
 {
-   return ((const struct brw_buffer *)buf)->is_user_buffer;
+   return ((const struct brw_buffer *)buf)->user_buffer != NULL;
 }
 
-struct brw_winsys_buffer *
-brw_surface_bo( struct pipe_surface *surface );
-
 unsigned
 brw_surface_pitch( const struct pipe_surface *surface );
 
+/***********************************************************************
+ * Internal functions 
+ */
+GLboolean brw_texture_layout(struct brw_screen *brw_screen,
+                            struct brw_texture *tex );
+
+void brw_update_texture( struct brw_screen *brw_screen,
+                        struct brw_texture *tex );
+
+
+void brw_screen_tex_init( struct brw_screen *brw_screen );
+void brw_screen_tex_surface_init( struct brw_screen *brw_screen );
+
+void brw_screen_buffer_init(struct brw_screen *brw_screen);
+
+
+boolean brw_is_texture_referenced_by_bo( struct brw_screen *brw_screen,
+                                         struct pipe_texture *texture,
+                                         unsigned face, 
+                                         unsigned level,
+                                         struct brw_winsys_buffer *bo );
+
+boolean brw_is_buffer_referenced_by_bo( struct brw_screen *brw_screen,
+                                        struct pipe_buffer *buffer,
+                                        struct brw_winsys_buffer *bo );
+
+
 
 #endif /* BRW_SCREEN_H */