mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
r300: make blit code work on swtcl machines.
Only tested this on my rv530 with R300_NO_TCL=1, but it works there at least. It would be nice to fix the tex_offset by chaning the vertex program on tcl to read from offset 6 but this isn't really necessary. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
c27fed58e4
commit
25e439e69f
1 changed files with 18 additions and 5 deletions
|
|
@ -126,7 +126,8 @@ static void create_fragment_program(struct r300_context *r300)
|
|||
|
||||
void r300_blit_init(struct r300_context *r300)
|
||||
{
|
||||
create_vertex_program(r300);
|
||||
if (r300->options.hw_tcl_enabled)
|
||||
create_vertex_program(r300);
|
||||
create_fragment_program(r300);
|
||||
}
|
||||
|
||||
|
|
@ -341,8 +342,14 @@ static void emit_pvs_setup(struct r300_context *r300,
|
|||
|
||||
static void emit_vap_setup(struct r300_context *r300)
|
||||
{
|
||||
int tex_offset;
|
||||
BATCH_LOCALS(&r300->radeon);
|
||||
|
||||
if (r300->options.hw_tcl_enabled)
|
||||
tex_offset = 1;
|
||||
else
|
||||
tex_offset = 6;
|
||||
|
||||
BEGIN_BATCH(12);
|
||||
OUT_BATCH_REGSEQ(R300_SE_VTE_CNTL, 2);
|
||||
OUT_BATCH(R300_VTX_XY_FMT | R300_VTX_Z_FMT);
|
||||
|
|
@ -351,7 +358,7 @@ static void emit_vap_setup(struct r300_context *r300)
|
|||
OUT_BATCH_REGVAL(R300_VAP_PSC_SGN_NORM_CNTL, 0xaaaaaaaa);
|
||||
OUT_BATCH_REGVAL(R300_VAP_PROG_STREAM_CNTL_0,
|
||||
((R300_DATA_TYPE_FLOAT_2 | (0 << R300_DST_VEC_LOC_SHIFT)) << 0) |
|
||||
(((1 << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_2 | R300_LAST_VEC) << 16));
|
||||
(((tex_offset << R300_DST_VEC_LOC_SHIFT) | R300_DATA_TYPE_FLOAT_2 | R300_LAST_VEC) << 16));
|
||||
OUT_BATCH_REGVAL(R300_VAP_PROG_STREAM_CNTL_EXT_0,
|
||||
((((R300_SWIZZLE_SELECT_X << R300_SWIZZLE_SELECT_X_SHIFT) |
|
||||
(R300_SWIZZLE_SELECT_Y << R300_SWIZZLE_SELECT_Y_SHIFT) |
|
||||
|
|
@ -450,7 +457,7 @@ static void other_stuff(struct r300_context *r300)
|
|||
{
|
||||
BATCH_LOCALS(&r300->radeon);
|
||||
|
||||
BEGIN_BATCH(15);
|
||||
BEGIN_BATCH(13);
|
||||
OUT_BATCH_REGVAL(R300_GA_POLY_MODE,
|
||||
R300_GA_POLY_MODE_FRONT_PTYPE_TRI | R300_GA_POLY_MODE_BACK_PTYPE_TRI);
|
||||
OUT_BATCH_REGVAL(R300_SU_CULL_MODE, R300_FRONT_FACE_CCW);
|
||||
|
|
@ -459,9 +466,13 @@ static void other_stuff(struct r300_context *r300)
|
|||
OUT_BATCH_REGSEQ(R300_RB3D_CBLEND, 2);
|
||||
OUT_BATCH(0x0);
|
||||
OUT_BATCH(0x0);
|
||||
OUT_BATCH_REGVAL(R300_VAP_CLIP_CNTL, R300_CLIP_DISABLE);
|
||||
OUT_BATCH_REGVAL(R300_ZB_CNTL, 0);
|
||||
END_BATCH();
|
||||
if (r300->options.hw_tcl_enabled) {
|
||||
BEGIN_BATCH(2);
|
||||
OUT_BATCH_REGVAL(R300_VAP_CLIP_CNTL, R300_CLIP_DISABLE);
|
||||
END_BATCH();
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_cb_setup(struct r300_context *r300,
|
||||
|
|
@ -634,7 +645,9 @@ unsigned r300_blit(GLcontext *ctx,
|
|||
r300_emit_rs_setup(r300);
|
||||
}
|
||||
|
||||
emit_pvs_setup(r300, r300->blit.vp_code.body.d, 2);
|
||||
if (r300->options.hw_tcl_enabled)
|
||||
emit_pvs_setup(r300, r300->blit.vp_code.body.d, 2);
|
||||
|
||||
emit_vap_setup(r300);
|
||||
|
||||
emit_cb_setup(r300, dst_bo, dst_offset, dst_mesaformat, dst_pitch, dst_width, dst_height);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue