mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 03:48:06 +02:00
r300-gallium: Make UCP and clip work again for SW TCL.
SW TCL: tri-clip works, tri-userclip works HW TCL: tri-clip fails, tri-userclip works That is a 200% improvement over the previous situation. Woot.
This commit is contained in:
parent
ffa1972efb
commit
cb3b91f2d6
2 changed files with 21 additions and 19 deletions
|
|
@ -149,8 +149,8 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
|
|||
r300->draw = draw_create();
|
||||
/* Enable our renderer. */
|
||||
draw_set_rasterize_stage(r300->draw, r300_draw_stage(r300));
|
||||
/* Tell Draw that we can always do non-UCP clipping. */
|
||||
draw_set_driver_clipping(r300->draw, TRUE);
|
||||
/* Disable Draw's clipping if TCL is present. */
|
||||
draw_set_driver_clipping(r300->draw, r300_screen(screen)->caps->has_tcl);
|
||||
/* Force Draw to never do viewport transform, since (again) we can do
|
||||
* transform in hardware, always. */
|
||||
draw_set_viewport_state(r300->draw, &r300_viewport_identity);
|
||||
|
|
|
|||
|
|
@ -63,25 +63,27 @@ void r300_emit_clip_state(struct r300_context* r300,
|
|||
struct r300_screen* r300screen = r300_screen(r300->context.screen);
|
||||
CS_LOCALS(r300);
|
||||
|
||||
if (!r300screen->caps->has_tcl) {
|
||||
return;
|
||||
if (r300screen->caps->has_tcl) {
|
||||
BEGIN_CS(5 + (6 * 4));
|
||||
OUT_CS_REG(R300_VAP_PVS_VECTOR_INDX_REG,
|
||||
(r300screen->caps->is_r500 ?
|
||||
R500_PVS_UCP_START : R300_PVS_UCP_START));
|
||||
OUT_CS_ONE_REG(R300_VAP_PVS_UPLOAD_DATA, 6 * 4);
|
||||
for (i = 0; i < 6; i++) {
|
||||
OUT_CS_32F(clip->ucp[i][0]);
|
||||
OUT_CS_32F(clip->ucp[i][1]);
|
||||
OUT_CS_32F(clip->ucp[i][2]);
|
||||
OUT_CS_32F(clip->ucp[i][3]);
|
||||
}
|
||||
OUT_CS_REG(R300_VAP_CLIP_CNTL, ((1 << clip->nr) - 1) |
|
||||
R300_PS_UCP_MODE_CLIP_AS_TRIFAN);
|
||||
END_CS;
|
||||
} else {
|
||||
BEGIN_CS(2);
|
||||
OUT_CS_REG(R300_VAP_CLIP_CNTL, R300_CLIP_DISABLE);
|
||||
END_CS;
|
||||
}
|
||||
|
||||
BEGIN_CS(5 + (6 * 4));
|
||||
OUT_CS_REG(R300_VAP_PVS_VECTOR_INDX_REG,
|
||||
(r300screen->caps->is_r500 ?
|
||||
R500_PVS_UCP_START : R300_PVS_UCP_START));
|
||||
OUT_CS_ONE_REG(R300_VAP_PVS_UPLOAD_DATA, 6 * 4);
|
||||
for (i = 0; i < 6; i++) {
|
||||
OUT_CS_32F(clip->ucp[i][0]);
|
||||
OUT_CS_32F(clip->ucp[i][1]);
|
||||
OUT_CS_32F(clip->ucp[i][2]);
|
||||
OUT_CS_32F(clip->ucp[i][3]);
|
||||
}
|
||||
|
||||
OUT_CS_REG(R300_VAP_CLIP_CNTL, ((1 << clip->nr) - 1) |
|
||||
R300_PS_UCP_MODE_CLIP_AS_TRIFAN);
|
||||
END_CS;
|
||||
}
|
||||
|
||||
void r300_emit_dsa_state(struct r300_context* r300,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue