r300g: Add CS table writing.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 26 Apr 2010 07:08:46 +0000 (00:08 -0700)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 26 Apr 2010 07:24:26 +0000 (00:24 -0700)
src/gallium/drivers/r300/r300_cs.h
src/gallium/drivers/r300/r300_winsys.h
src/gallium/winsys/radeon/drm/radeon_r300.c

index 456b2ec7b922a52e6f2f458ea95dd4e043cffa7f..96f2825b6d6deb624bc1df22f91db9367a9b9f3a 100644 (file)
     cs_count--; \
 } while (0)
 
+#define OUT_CS_TABLE(values, count) do { \
+    if (VERY_VERBOSE_REGISTERS) \
+        DBG(cs_context_copy, DBG_CS, "r300: writing table of %d dwords\n", count); \
+    cs_winsys->write_cs_table(cs_winsys, values, count); \
+    cs_count -= count; \
+} while (0)
+
 #define OUT_CS_BUF_RELOC(bo, offset, rd, wd, flags) do { \
     DBG(cs_context_copy, DBG_CS, "r300: writing relocation for buffer %p, offset %d, " \
             "domains (%d, %d, %d)\n", \
index fa00a0cba9302fca4b72ee027c99475116f0ede6..60c4d18e3a2f96d612759094bddaf567ae9e9d73 100644 (file)
@@ -119,6 +119,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,
+                           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,
index 90675ada968e3ee283fab6d777aa5f71053cc294..cab41dba3d50bd70d52ba6ebd80284350fc6997f 100644 (file)
@@ -201,6 +201,13 @@ static void radeon_write_cs_dword(struct r300_winsys_screen *rws,
     radeon_cs_write_dword(ws->cs, dword);
 }
 
+static void radeon_write_cs_table(struct r300_winsys_screen *rws,
+                                  void *table, unsigned count)
+{
+    struct radeon_libdrm_winsys *ws = radeon_winsys_screen(rws);
+    radeon_cs_write_table(ws->cs, table, count);
+}
+
 static void radeon_write_cs_reloc(struct r300_winsys_screen *rws,
                                   struct r300_winsys_buffer *buf,
                                   uint32_t rd,
@@ -322,6 +329,7 @@ radeon_setup_winsys(int fd, struct radeon_libdrm_winsys* ws)
     ws->base.check_cs = radeon_check_cs;
     ws->base.begin_cs = radeon_begin_cs;
     ws->base.write_cs_dword = radeon_write_cs_dword;
+    ws->base.write_cs_table = radeon_write_cs_table;
     ws->base.write_cs_reloc = radeon_write_cs_reloc;
     ws->base.end_cs = radeon_end_cs;
     ws->base.flush_cs = radeon_flush_cs;