mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 16:00:09 +01:00
R300: clean up VAP_PROG_STREAM_CNTL* register usage
This commit is contained in:
parent
2bd26f4afa
commit
e61dadf3de
5 changed files with 109 additions and 63 deletions
|
|
@ -328,10 +328,10 @@ void r300InitCmdBuf(r300ContextPtr r300)
|
|||
r300->hw.vap_cntl_status.cmd[0] = cmdpacket0(R300_VAP_CNTL_STATUS, 1);
|
||||
ALLOC_STATE(vir[0], variable, R300_VIR_CMDSIZE, 0);
|
||||
r300->hw.vir[0].cmd[R300_VIR_CMD_0] =
|
||||
cmdpacket0(R300_VAP_INPUT_ROUTE_0_0, 1);
|
||||
cmdpacket0(R300_VAP_PROG_STREAM_CNTL_0, 1);
|
||||
ALLOC_STATE(vir[1], variable, R300_VIR_CMDSIZE, 1);
|
||||
r300->hw.vir[1].cmd[R300_VIR_CMD_0] =
|
||||
cmdpacket0(R300_VAP_INPUT_ROUTE_1_0, 1);
|
||||
cmdpacket0(R300_VAP_PROG_STREAM_CNTL_EXT_0, 1);
|
||||
ALLOC_STATE(vic, always, R300_VIC_CMDSIZE, 0);
|
||||
r300->hw.vic.cmd[R300_VIC_CMD_0] = cmdpacket0(R300_VAP_INPUT_CNTL_0, 2);
|
||||
ALLOC_STATE(vap_psc_sgn_norm_cntl, always, 2, 0);
|
||||
|
|
|
|||
|
|
@ -216,14 +216,18 @@ static GLuint r300VAPInputRoute0(uint32_t * dst, GLvector4f ** attribptr,
|
|||
for (i = 0; i < nr; i += 2) {
|
||||
/* make sure input is valid, would lockup the gpu */
|
||||
assert(inputs[tab[i]] != -1);
|
||||
dw = R300_INPUT_ROUTE_FLOAT | (inputs[tab[i]] << 8) | (attribptr[tab[i]]->size - 1);
|
||||
dw = (R300_SIGNED |
|
||||
(inputs[tab[i]] << R300_DST_VEC_LOC_SHIFT) |
|
||||
(attribptr[tab[i]]->size - 1)) << R300_DATA_TYPE_0_SHIFT;
|
||||
if (i + 1 == nr) {
|
||||
dw |= R300_VAP_INPUT_ROUTE_END;
|
||||
dw |= R300_LAST_VEC << R300_DATA_TYPE_0_SHIFT;
|
||||
} else {
|
||||
assert(inputs[tab[i + 1]] != -1);
|
||||
dw |= (R300_INPUT_ROUTE_FLOAT | (inputs[tab[i + 1]] << 8) | (attribptr[tab[i + 1]]->size - 1)) << 16;
|
||||
dw |= (R300_SIGNED |
|
||||
(inputs[tab[i + 1]] << R300_DST_VEC_LOC_SHIFT) |
|
||||
(attribptr[tab[i + 1]]->size - 1)) << R300_DATA_TYPE_1_SHIFT;
|
||||
if (i + 2 == nr) {
|
||||
dw |= (R300_VAP_INPUT_ROUTE_END << 16);
|
||||
dw |= R300_LAST_VEC << R300_DATA_TYPE_1_SHIFT;
|
||||
}
|
||||
}
|
||||
dst[i >> 1] = dw;
|
||||
|
|
@ -234,10 +238,10 @@ static GLuint r300VAPInputRoute0(uint32_t * dst, GLvector4f ** attribptr,
|
|||
|
||||
static GLuint r300VAPInputRoute1Swizzle(int swizzle[4])
|
||||
{
|
||||
return (swizzle[0] << R300_INPUT_ROUTE_X_SHIFT) |
|
||||
(swizzle[1] << R300_INPUT_ROUTE_Y_SHIFT) |
|
||||
(swizzle[2] << R300_INPUT_ROUTE_Z_SHIFT) |
|
||||
(swizzle[3] << R300_INPUT_ROUTE_W_SHIFT);
|
||||
return (swizzle[0] << R300_SWIZZLE_SELECT_X_SHIFT) |
|
||||
(swizzle[1] << R300_SWIZZLE_SELECT_Y_SHIFT) |
|
||||
(swizzle[2] << R300_SWIZZLE_SELECT_Z_SHIFT) |
|
||||
(swizzle[3] << R300_SWIZZLE_SELECT_W_SHIFT);
|
||||
}
|
||||
|
||||
GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr)
|
||||
|
|
@ -245,9 +249,13 @@ GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr)
|
|||
GLuint i, dw;
|
||||
|
||||
for (i = 0; i < nr; i += 2) {
|
||||
dw = r300VAPInputRoute1Swizzle(swizzle[i]) | R300_INPUT_ROUTE_ENABLE;
|
||||
dw = (r300VAPInputRoute1Swizzle(swizzle[i]) |
|
||||
((R300_WRITE_ENA_X | R300_WRITE_ENA_Y |
|
||||
R300_WRITE_ENA_Z | R300_WRITE_ENA_W) << R300_WRITE_ENA_SHIFT)) << R300_SWIZZLE0_SHIFT;
|
||||
if (i + 1 < nr) {
|
||||
dw |= (r300VAPInputRoute1Swizzle(swizzle[i + 1]) | R300_INPUT_ROUTE_ENABLE) << 16;
|
||||
dw |= (r300VAPInputRoute1Swizzle(swizzle[i + 1]) |
|
||||
((R300_WRITE_ENA_X | R300_WRITE_ENA_Y |
|
||||
R300_WRITE_ENA_Z | R300_WRITE_ENA_W) << R300_WRITE_ENA_SHIFT)) << R300_SWIZZLE1_SHIFT;
|
||||
}
|
||||
dst[i >> 1] = dw;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,11 +204,15 @@ static void r300EmitClearState(GLcontext * ctx)
|
|||
* these registers, as well as the actual values used for rendering.
|
||||
*/
|
||||
R300_STATECHANGE(r300, vir[0]);
|
||||
reg_start(R300_VAP_INPUT_ROUTE_0_0, 0);
|
||||
reg_start(R300_VAP_PROG_STREAM_CNTL_0, 0);
|
||||
if (!has_tcl)
|
||||
e32(0x22030003);
|
||||
/*e32(0x22030003);*/
|
||||
e32(((((0 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_4) << R300_DATA_TYPE_0_SHIFT) |
|
||||
((R300_LAST_VEC | (2 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_4) << R300_DATA_TYPE_1_SHIFT)));
|
||||
else
|
||||
e32(0x21030003);
|
||||
/*e32(0x21030003);*/
|
||||
e32(((((0 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_4) << R300_DATA_TYPE_0_SHIFT) |
|
||||
((R300_LAST_VEC | (1 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_4) << R300_DATA_TYPE_1_SHIFT)));
|
||||
|
||||
/* disable fog */
|
||||
R300_STATECHANGE(r300, fogs);
|
||||
|
|
@ -216,8 +220,19 @@ static void r300EmitClearState(GLcontext * ctx)
|
|||
e32(0x0);
|
||||
|
||||
R300_STATECHANGE(r300, vir[1]);
|
||||
reg_start(R300_VAP_INPUT_ROUTE_1_0, 0);
|
||||
e32(0xF688F688);
|
||||
reg_start(R300_VAP_PROG_STREAM_CNTL_EXT_0, 0);
|
||||
e32(((((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_Z << R300_SWIZZLE_SELECT_Z_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_W << R300_SWIZZLE_SELECT_W_SHIFT) |
|
||||
((R300_WRITE_ENA_X | R300_WRITE_ENA_Y | R300_WRITE_ENA_Z | R300_WRITE_ENA_W) << R300_WRITE_ENA_SHIFT))
|
||||
<< R300_SWIZZLE0_SHIFT) |
|
||||
(((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_Z << R300_SWIZZLE_SELECT_Z_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_W << R300_SWIZZLE_SELECT_W_SHIFT) |
|
||||
((R300_WRITE_ENA_X | R300_WRITE_ENA_Y | R300_WRITE_ENA_Z | R300_WRITE_ENA_W) << R300_WRITE_ENA_SHIFT))
|
||||
<< R300_SWIZZLE1_SHIFT)));
|
||||
|
||||
/* R300_VAP_INPUT_CNTL_0, R300_VAP_INPUT_CNTL_1 */
|
||||
R300_STATECHANGE(r300, vic);
|
||||
|
|
|
|||
|
|
@ -218,27 +218,31 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
* Always set COMPONENTS_4 in immediate mode.
|
||||
*/
|
||||
|
||||
#define R300_VAP_INPUT_ROUTE_0_0 0x2150
|
||||
# define R300_INPUT_ROUTE_COMPONENTS_1 (0 << 0)
|
||||
# define R300_INPUT_ROUTE_COMPONENTS_2 (1 << 0)
|
||||
# define R300_INPUT_ROUTE_COMPONENTS_3 (2 << 0)
|
||||
# define R300_INPUT_ROUTE_COMPONENTS_4 (3 << 0)
|
||||
# define R300_INPUT_ROUTE_COMPONENTS_RGBA (4 << 0) /* GUESS */
|
||||
# define R300_VAP_INPUT_ROUTE_IDX_SHIFT 8
|
||||
# define R300_VAP_INPUT_ROUTE_IDX_MASK (31 << 8) /* GUESS */
|
||||
# define R300_VAP_INPUT_ROUTE_END (1 << 13)
|
||||
# define R300_INPUT_ROUTE_IMMEDIATE_MODE (0 << 14) /* GUESS */
|
||||
# define R300_INPUT_ROUTE_FLOAT (1 << 14) /* GUESS */
|
||||
# define R300_INPUT_ROUTE_UNSIGNED_BYTE (2 << 14) /* GUESS */
|
||||
# define R300_INPUT_ROUTE_FLOAT_COLOR (3 << 14) /* GUESS */
|
||||
#define R300_VAP_INPUT_ROUTE_0_1 0x2154
|
||||
#define R300_VAP_INPUT_ROUTE_0_2 0x2158
|
||||
#define R300_VAP_INPUT_ROUTE_0_3 0x215C
|
||||
#define R300_VAP_INPUT_ROUTE_0_4 0x2160
|
||||
#define R300_VAP_INPUT_ROUTE_0_5 0x2164
|
||||
#define R300_VAP_INPUT_ROUTE_0_6 0x2168
|
||||
#define R300_VAP_INPUT_ROUTE_0_7 0x216C
|
||||
|
||||
#define R300_VAP_PROG_STREAM_CNTL_0 0x2150
|
||||
# define R300_DATA_TYPE_0_SHIFT 0
|
||||
# define R300_DATA_TYPE_FLOAT_1 0
|
||||
# define R300_DATA_TYPE_FLOAT_2 1
|
||||
# define R300_DATA_TYPE_FLOAT_3 2
|
||||
# define R300_DATA_TYPE_FLOAT_4 3
|
||||
# define R300_DATA_TYPE_BYTE 4
|
||||
# define R300_DATA_TYPE_D3DCOLOR 5
|
||||
# define R300_DATA_TYPE_SHORT_2 6
|
||||
# define R300_DATA_TYPE_SHORT_4 7
|
||||
# define R300_DATA_TYPE_VECTOR_3_TTT 8
|
||||
# define R300_DATA_TYPE_VECTOR_3_EET 9
|
||||
# define R300_SKIP_DWORDS_SHIFT 4
|
||||
# define R300_DST_VEC_LOC_SHIFT 8
|
||||
# define R300_LAST_VEC (1 << 13)
|
||||
# define R300_SIGNED (1 << 14)
|
||||
# define R300_NORMALIZE (1 << 15)
|
||||
# define R300_DATA_TYPE_1_SHIFT 16
|
||||
#define R300_VAP_PROG_STREAM_CNTL_1 0x2154
|
||||
#define R300_VAP_PROG_STREAM_CNTL_2 0x2158
|
||||
#define R300_VAP_PROG_STREAM_CNTL_3 0x215C
|
||||
#define R300_VAP_PROG_STREAM_CNTL_4 0x2160
|
||||
#define R300_VAP_PROG_STREAM_CNTL_5 0x2164
|
||||
#define R300_VAP_PROG_STREAM_CNTL_6 0x2168
|
||||
#define R300_VAP_PROG_STREAM_CNTL_7 0x216C
|
||||
/* gap */
|
||||
|
||||
/* Notes:
|
||||
|
|
@ -276,26 +280,40 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
* mode, the swizzling pattern is e.g. used to set zw components in texture
|
||||
* coordinates with only tweo components.
|
||||
*/
|
||||
#define R300_VAP_INPUT_ROUTE_1_0 0x21E0
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_0 0x21e0
|
||||
# define R300_SWIZZLE0_SHIFT 0
|
||||
# define R300_SWIZZLE_SELECT_X_SHIFT 0
|
||||
# define R300_SWIZZLE_SELECT_Y_SHIFT 3
|
||||
# define R300_SWIZZLE_SELECT_Z_SHIFT 6
|
||||
# define R300_SWIZZLE_SELECT_W_SHIFT 9
|
||||
|
||||
# define R300_SWIZZLE_SELECT_X 0
|
||||
# define R300_SWIZZLE_SELECT_Y 1
|
||||
# define R300_SWIZZLE_SELECT_Z 2
|
||||
# define R300_SWIZZLE_SELECT_W 3
|
||||
# define R300_SWIZZLE_SELECT_FP_ZERO 4
|
||||
# define R300_SWIZZLE_SELECT_FP_ONE 5
|
||||
/* alternate forms for r300_emit.c */
|
||||
# define R300_INPUT_ROUTE_SELECT_X 0
|
||||
# define R300_INPUT_ROUTE_SELECT_Y 1
|
||||
# define R300_INPUT_ROUTE_SELECT_Z 2
|
||||
# define R300_INPUT_ROUTE_SELECT_W 3
|
||||
# define R300_INPUT_ROUTE_SELECT_ZERO 4
|
||||
# define R300_INPUT_ROUTE_SELECT_ONE 5
|
||||
# define R300_INPUT_ROUTE_SELECT_MASK 7
|
||||
# define R300_INPUT_ROUTE_X_SHIFT 0
|
||||
# define R300_INPUT_ROUTE_Y_SHIFT 3
|
||||
# define R300_INPUT_ROUTE_Z_SHIFT 6
|
||||
# define R300_INPUT_ROUTE_W_SHIFT 9
|
||||
# define R300_INPUT_ROUTE_ENABLE (15 << 12)
|
||||
#define R300_VAP_INPUT_ROUTE_1_1 0x21E4
|
||||
#define R300_VAP_INPUT_ROUTE_1_2 0x21E8
|
||||
#define R300_VAP_INPUT_ROUTE_1_3 0x21EC
|
||||
#define R300_VAP_INPUT_ROUTE_1_4 0x21F0
|
||||
#define R300_VAP_INPUT_ROUTE_1_5 0x21F4
|
||||
#define R300_VAP_INPUT_ROUTE_1_6 0x21F8
|
||||
#define R300_VAP_INPUT_ROUTE_1_7 0x21FC
|
||||
|
||||
# define R300_WRITE_ENA_SHIFT 12
|
||||
# define R300_WRITE_ENA_X 1
|
||||
# define R300_WRITE_ENA_Y 2
|
||||
# define R300_WRITE_ENA_Z 4
|
||||
# define R300_WRITE_ENA_W 8
|
||||
# define R300_SWIZZLE1_SHIFT 16
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_1 0x21e4
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_2 0x21e8
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_3 0x21ec
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_4 0x21f0
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_5 0x21f4
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_6 0x21f8
|
||||
#define R300_VAP_PROG_STREAM_CNTL_EXT_7 0x21fc
|
||||
|
||||
/* END: Vertex data assembly */
|
||||
|
||||
|
|
|
|||
|
|
@ -85,21 +85,26 @@ static GLuint r300VAPInputRoute0(uint32_t * dst, GLvector4f ** attribptr,
|
|||
GLuint i, dw;
|
||||
|
||||
/* type, inputs, stop bit, size */
|
||||
for (i = 0; i + 1 < nr; i += 2) {
|
||||
dw = (inputs[tab[i]] << 8) | 0x3;
|
||||
dw |= ((inputs[tab[i + 1]] << 8) | 0x3) << 16;
|
||||
if (i + 2 == nr) {
|
||||
dw |= (R300_VAP_INPUT_ROUTE_END << 16);
|
||||
for (i = 0; i < nr; i += 2) {
|
||||
/* make sure input is valid, would lockup the gpu */
|
||||
assert(inputs[tab[i]] != -1);
|
||||
dw = (R300_SIGNED |
|
||||
(inputs[tab[i]] << R300_DST_VEC_LOC_SHIFT) |
|
||||
(attribptr[tab[i]]->size - 1)) << R300_DATA_TYPE_0_SHIFT;
|
||||
if (i + 1 == nr) {
|
||||
dw |= R300_LAST_VEC << R300_DATA_TYPE_0_SHIFT;
|
||||
} else {
|
||||
assert(inputs[tab[i + 1]] != -1);
|
||||
dw |= (R300_SIGNED |
|
||||
(inputs[tab[i + 1]] << R300_DST_VEC_LOC_SHIFT) |
|
||||
(attribptr[tab[i + 1]]->size - 1)) << R300_DATA_TYPE_1_SHIFT;
|
||||
if (i + 2 == nr) {
|
||||
dw |= R300_LAST_VEC << R300_DATA_TYPE_1_SHIFT;
|
||||
}
|
||||
}
|
||||
dst[i >> 1] = dw;
|
||||
}
|
||||
|
||||
if (nr & 1) {
|
||||
dw = (inputs[tab[nr - 1]] << 8) | 0x3;
|
||||
dw |= R300_VAP_INPUT_ROUTE_END;
|
||||
dst[nr >> 1] = dw;
|
||||
}
|
||||
|
||||
return (nr + 1) >> 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue