r300, amd: Add the ability to flush the CS.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Tue, 13 Jan 2009 23:21:29 +0000 (15:21 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 2 Feb 2009 07:30:22 +0000 (23:30 -0800)
This is probably important, yeah?

src/gallium/drivers/r300/r300_cs.h
src/gallium/drivers/r300/r300_winsys.h
src/gallium/winsys/drm/amd/amd_r300.c

index 1422842e0ce3a85b447323282a8747d138839ad7..bd392afca39666de110e8c9aa47f70a04816455a 100644 (file)
@@ -69,4 +69,7 @@
 #define END_CS \
     cs_winsys->end_cs(cs, __FILE__, __FUNCTION__, __LINE__)
 
+#define FLUSH_CS \
+    cs_winsys->flush_cs(cs)
+
 #endif /* R300_CS_H */
\ No newline at end of file
index 7048a9c88d5555a0a85e3ca8fda7f5469834eb0b..7711dc792d6dcf3f09243b3d089c672c279bb1f0 100644 (file)
@@ -74,6 +74,8 @@ struct r300_winsys {
            const char* function,
            int line);
 
+    /* Flush the CS. */
+    void (*flush_cs)(struct radeon_cs* cs);
 };
 
 struct pipe_context* r300_create_context(struct pipe_screen* screen,
index 0bc0a842c13f785b7bda2335511c897aab3946b4..0f543df9e10c0a99d2f3eadba93ea5bd99bd467f 100644 (file)
@@ -37,6 +37,12 @@ static void amd_r300_write_cs_reloc(struct radeon_cs* cs,
     radeon_cs_write_reloc(cs, ((struct amd_pipe_buffer*)pbuffer)->bo, rd, wd, flags);
 }
 
+static void amd_r300_flush_cs(struct radeon_cs* cs)
+{
+    radeon_cs_emit(cs);
+    radeon_cs_erase(cs);
+}
+
 struct r300_winsys* amd_create_r300_winsys(int fd)
 {
     struct r300_winsys* winsys = calloc(1, sizeof(struct r300_winsys));
@@ -50,6 +56,7 @@ struct r300_winsys* amd_create_r300_winsys(int fd)
     winsys->write_cs_dword = radeon_cs_write_dword;
     winsys->write_cs_reloc = amd_r300_write_cs_reloc;
     winsys->end_cs = radeon_cs_end;
+    winsys->flush_cs = amd_r300_flush_cs;
 
     return winsys;
-}
\ No newline at end of file
+}