diff options
author | Matthias Hopf <mhopf@suse.de> | 2009-02-22 23:29:03 +0100 |
---|---|---|
committer | Matthias Hopf <mhopf@suse.de> | 2009-02-24 17:33:29 +0100 |
commit | 96dcc1f1a5e5be6bbe7128570fe6a765a4d447d2 (patch) | |
tree | f7ec7b7f3b98250cfb983f77323fd2c87078f231 | |
parent | d032130c7f47c93528e02f121cdb898ad3473896 (diff) |
Add wait_for_vsync().
-rw-r--r-- | r600_lib.c | 14 | ||||
-rw-r--r-- | r600_lib.h | 1 | ||||
-rw-r--r-- | r600_reg_r6xx.h | 5 |
3 files changed, 19 insertions, 1 deletions
@@ -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; @@ -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, |