r300-gallium: Use viewport state.

This commit is contained in:
Corbin Simpson
2009-04-15 15:09:43 -07:00
parent a4e0a46a8d
commit 1a84072db9
+29 -13
View File
@@ -555,25 +555,41 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
{
struct r300_context* r300 = r300_context(pipe);
r300->viewport_state->xscale = state->scale[0];
r300->viewport_state->yscale = state->scale[1];
r300->viewport_state->zscale = state->scale[2];
r300->viewport_state->xoffset = state->translate[0];
r300->viewport_state->yoffset = state->translate[1];
r300->viewport_state->zoffset = state->translate[2];
r300->viewport_state->vte_control = 0;
if (r300_screen(r300->context.screen)->caps->has_tcl) {
/* Do the transform in HW. */
r300->viewport_state->vte_control |=
R300_VPORT_X_SCALE_ENA | R300_VPORT_X_OFFSET_ENA |
R300_VPORT_Y_SCALE_ENA | R300_VPORT_Y_OFFSET_ENA |
R300_VPORT_Z_SCALE_ENA | R300_VPORT_Z_OFFSET_ENA;
r300->viewport_state->vte_control = R300_VTX_W0_FMT;
if (state->scale[0] != 1.0f) {
r300->viewport_state->xscale = state->scale[0];
r300->viewport_state->vte_control |= R300_VPORT_X_SCALE_ENA;
}
if (state->scale[1] != 1.0f) {
r300->viewport_state->yscale = state->scale[1];
r300->viewport_state->vte_control |= R300_VPORT_Y_SCALE_ENA;
}
if (state->scale[2] != 1.0f) {
r300->viewport_state->zscale = state->scale[2];
r300->viewport_state->vte_control |= R300_VPORT_Z_SCALE_ENA;
}
if (state->translate[0] != 0.0f) {
r300->viewport_state->xoffset = state->translate[0];
r300->viewport_state->vte_control |= R300_VPORT_X_OFFSET_ENA;
}
if (state->translate[1] != 0.0f) {
r300->viewport_state->yoffset = state->translate[1];
r300->viewport_state->vte_control |= R300_VPORT_Y_OFFSET_ENA;
}
if (state->translate[2] != 0.0f) {
r300->viewport_state->zoffset = state->translate[2];
r300->viewport_state->vte_control |= R300_VPORT_Z_OFFSET_ENA;
}
} else {
r300->viewport_state->vte_control = 0;
/* Have Draw do the actual transform. */
draw_set_viewport_state(r300->draw, state);
}
r300->dirty_state |= R300_NEW_VIEWPORT;
}
static void r300_set_vertex_buffers(struct pipe_context* pipe,