summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hopf <mhopf@suse.de>2009-02-22 23:29:03 +0100
committerMatthias Hopf <mhopf@suse.de>2009-02-24 17:33:29 +0100
commit96dcc1f1a5e5be6bbe7128570fe6a765a4d447d2 (patch)
treef7ec7b7f3b98250cfb983f77323fd2c87078f231
parentd032130c7f47c93528e02f121cdb898ad3473896 (diff)
Add wait_for_vsync().
-rw-r--r--r600_lib.c14
-rw-r--r--r600_lib.h1
-rw-r--r--r600_reg_r6xx.h5
3 files changed, 19 insertions, 1 deletions
diff --git a/r600_lib.c b/r600_lib.c
index 30fad36..55df8d1 100644
--- a/r600_lib.c
+++ b/r600_lib.c
@@ -137,6 +137,20 @@ void wait_3d_full_idle_clean ()
}
+void emit_wait_for_vsync (adapter_t *adapt, int line)
+{
+ CMD_BUFFER_PREAMBLE (2 + 7);
+
+ PACK3 (IT_WAIT_REG_MEM, 6);
+ E32 (0x00000003); /* ME, Register, EqualTo */
+ E32 (D1CRTC_STATUS_POSITION >> 2);
+ E32 (0);
+ E32 (line); /* Ref value */
+ E32 (0xfff); /* Ref mask */
+ E32 (10); /* Wait interval */
+}
+
+
static void flush_indirect (void)
{
drm_radeon_indirect_t ind;
diff --git a/r600_lib.h b/r600_lib.h
index cb9fada..2a0ab3c 100644
--- a/r600_lib.h
+++ b/r600_lib.h
@@ -127,6 +127,7 @@ float time_flush_cmds (adapter_t *adapt, float maxtime);
void wait_3d_idle_clean(void);
void wait_3d_idle(void);
void wait_3d_full_idle_clean (void);
+void emit_wait_for_vsync (adapter_t *adapt, int line);
void simple_clear (adapter_t* adapt);
diff --git a/r600_reg_r6xx.h b/r600_reg_r6xx.h
index b2e72d2..398bd46 100644
--- a/r600_reg_r6xx.h
+++ b/r600_reg_r6xx.h
@@ -82,12 +82,15 @@ enum {
VENDOR_DEVICE_ID = 0x4000,
+ D1CRTC_STATUS_POSITION = 0x60a0,
D1GRPH_PRIMARY_SURFACE_ADDRESS = 0x6110,
D1GRPH_PITCH = 0x6120,
D1GRPH_X_START = 0x612c,
D1GRPH_X_END = 0x6134,
D1GRPH_Y_END = 0x6138,
-
+ D1MODE_VLINE_START_END = 0x6538,
+ D1MODE_VLINE_STATUS = 0x653c,
+
GRBM_STATUS = 0x8010,
CMDFIFO_AVAIL_mask = 0x1f << 0,
CMDFIFO_AVAIL_shift = 0,