r300g: better describe another flush and move it closer to the real problem
[mesa.git] / src / gallium / drivers / r300 / r300_winsys.h
index e5183a8239c9d74d9d585177abe74df344845645..f7cbbde410a0402efd826ead4c0672fc5255fbd9 100644 (file)
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
 
-struct r300_winsys_screen;
-
-/* Creates a new r300 screen. */
-struct pipe_screen* r300_create_screen(struct r300_winsys_screen *rws);
+#include "r300_defines.h"
 
 struct r300_winsys_buffer;
 
-
-boolean r300_get_texture_buffer(struct pipe_screen* screen,
-                                struct pipe_texture* texture,
-                                struct r300_winsys_buffer** buffer,
-                                unsigned *stride);
-
 enum r300_value_id {
     R300_VID_PCI_ID,
     R300_VID_GB_PIPES,
     R300_VID_Z_PIPES,
+    R300_VID_SQUARE_TILING_SUPPORT,
+    R300_VID_DRM_2_3_0,
+};
+
+enum r300_reference_domain { /* bitfield */
+    R300_REF_CS = 1,
+    R300_REF_HW = 2
 };
 
-#define R300_USAGE_FLAG_DONT_SYNC (1 << 17)
+struct r300_cs_info {
+    /* In DWORDs. */
+    unsigned used;
+    unsigned free;
+    unsigned capacity;
+};
 
 struct r300_winsys_screen {
     void (*destroy)(struct r300_winsys_screen *ws);
@@ -91,15 +94,10 @@ struct r300_winsys_screen {
                             struct r300_winsys_buffer **pdst,
                             struct r300_winsys_buffer *src);
 
-    boolean (*buffer_references)(struct r300_winsys_buffer *a,
-                                struct r300_winsys_buffer *b);
+    void (*buffer_wait)(struct r300_winsys_screen *rws,
+                        struct r300_winsys_buffer *buf);
 
-    void (*buffer_flush_range)(struct r300_winsys_screen *rws,
-                              struct r300_winsys_buffer *buf,
-                              unsigned offset,
-                              unsigned length);
-
-    /* Add a pipe_buffer to the list of buffer objects to validate. */
+    /* Add a pipe_resource to the list of buffer objects to validate. */
     boolean (*add_buffer)(struct r300_winsys_screen *winsys,
                           struct r300_winsys_buffer *buf,
                           uint32_t rd,
@@ -110,8 +108,9 @@ struct r300_winsys_screen {
      * Returns TRUE if a flush is required. */
     boolean (*validate)(struct r300_winsys_screen* winsys);
 
-    /* Check to see if there's room for commands. */
-    boolean (*check_cs)(struct r300_winsys_screen* winsys, int size);
+    /* Return current CS info. */
+    void (*get_cs_info)(struct r300_winsys_screen *winsys,
+                        struct r300_cs_info *info);
 
     /* Start a command emit. */
     void (*begin_cs)(struct r300_winsys_screen* winsys,
@@ -123,6 +122,10 @@ struct r300_winsys_screen {
     /* Write a dword to the command buffer. */
     void (*write_cs_dword)(struct r300_winsys_screen* winsys, uint32_t dword);
 
+    /* Write a table of dwords to the command buffer. */
+    void (*write_cs_table)(struct r300_winsys_screen* winsys,
+                           const void *dwords, unsigned count);
+
     /* Write a relocated dword to the command buffer. */
     void (*write_cs_reloc)(struct r300_winsys_screen *winsys,
                            struct r300_winsys_buffer *buf,
@@ -145,11 +148,16 @@ struct r300_winsys_screen {
 
     void (*reset_bos)(struct r300_winsys_screen *winsys);
 
+    void (*buffer_get_tiling)(struct r300_winsys_screen *winsys,
+                              struct r300_winsys_buffer *buffer,
+                              enum r300_buffer_tiling *microtiled,
+                              enum r300_buffer_tiling *macrotiled);
+
     void (*buffer_set_tiling)(struct r300_winsys_screen *winsys,
                               struct r300_winsys_buffer *buffer,
                               uint32_t pitch,
-                              boolean microtiled,
-                              boolean macrotiled);
+                              enum r300_buffer_tiling microtiled,
+                              enum r300_buffer_tiling macrotiled);
 
     uint32_t (*get_value)(struct r300_winsys_screen *winsys,
                          enum r300_value_id vid);
@@ -164,12 +172,14 @@ struct r300_winsys_screen {
                                 struct winsys_handle *whandle);
 
     boolean (*is_buffer_referenced)(struct r300_winsys_screen *winsys,
-                                    struct r300_winsys_buffer *buffer);
-
-  
+                                    struct r300_winsys_buffer *buffer,
+                                    enum r300_reference_domain domain);
 };
 
 struct r300_winsys_screen *
 r300_winsys_screen(struct pipe_screen *screen);
 
+/* Creates a new r300 screen. */
+struct pipe_screen* r300_create_screen(struct r300_winsys_screen *rws);
+
 #endif /* R300_WINSYS_H */