diff options
Diffstat (limited to 'src/gallium/drivers/r600/r600_pipe.h')
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 8889ba7430f..e4c6df7d772 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -491,9 +491,11 @@ unsigned r600_tex_compare(unsigned compare); #define PKT3_SET_CONFIG_REG 0x68 #define PKT3_SET_CONTEXT_REG 0x69 +#define PKT3_SET_CTL_CONST 0x6F -#define R600_CONFIG_REG_OFFSET 0x8000 +#define R600_CONFIG_REG_OFFSET 0x08000 #define R600_CONTEXT_REG_OFFSET 0x28000 +#define R600_CTL_CONST_OFFSET 0x3CFF0 #define PKT_TYPE_S(x) (((x) & 0x3) << 30) #define PKT_COUNT_S(x) (((x) & 0x3FFF) << 16) @@ -516,12 +518,20 @@ static INLINE void r600_store_config_reg_seq(struct r600_command_buffer *cb, uns static INLINE void r600_store_context_reg_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num) { - assert(reg >= R600_CONTEXT_REG_OFFSET); + assert(reg >= R600_CONTEXT_REG_OFFSET && reg < R600_CTL_CONST_OFFSET); assert(cb->atom.num_dw+2+num <= cb->max_num_dw); cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_CONTEXT_REG, num, 0); cb->buf[cb->atom.num_dw++] = (reg - R600_CONTEXT_REG_OFFSET) >> 2; } +static INLINE void r600_store_ctl_const_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num) +{ + assert(reg >= R600_CTL_CONST_OFFSET); + assert(cb->atom.num_dw+2+num <= cb->max_num_dw); + cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_CTL_CONST, num, 0); + cb->buf[cb->atom.num_dw++] = (reg - R600_CTL_CONST_OFFSET) >> 2; +} + static INLINE void r600_store_config_reg(struct r600_command_buffer *cb, unsigned reg, unsigned value) { r600_store_config_reg_seq(cb, reg, 1); @@ -534,6 +544,12 @@ static INLINE void r600_store_context_reg(struct r600_command_buffer *cb, unsign r600_store_value(cb, value); } +static INLINE void r600_store_ctl_const(struct r600_command_buffer *cb, unsigned reg, unsigned value) +{ + r600_store_ctl_const_seq(cb, reg, 1); + r600_store_value(cb, value); +} + void r600_init_command_buffer(struct r600_command_buffer *cb, unsigned num_dw, enum r600_atom_flags flags); void r600_release_command_buffer(struct r600_command_buffer *cb); |