mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
r300: fix wpos/fog handling
It may happen that the vertex attribute we were going to stuff the wpos/fog attrs in was already written by vertex program. In such cases we need to remove instruction accessing these attributes, so they don't overwrite the wpos/fog related instructions. This fixes non-textured models in many wine games.
This commit is contained in:
parent
70929f4505
commit
bed7d88708
1 changed files with 16 additions and 6 deletions
|
|
@ -263,15 +263,25 @@ static struct r300_vertex_program *build_program(GLcontext *ctx,
|
|||
rc_move_output(&compiler.Base, VERT_RESULT_PSIZ, VERT_RESULT_PSIZ, WRITEMASK_X);
|
||||
|
||||
if (vp->key.WPosAttr != FRAG_ATTRIB_MAX) {
|
||||
rc_copy_output(&compiler.Base,
|
||||
VERT_RESULT_HPOS,
|
||||
vp->key.WPosAttr - FRAG_ATTRIB_TEX0 + VERT_RESULT_TEX0);
|
||||
unsigned int vp_wpos_attr = vp->key.WPosAttr - FRAG_ATTRIB_TEX0 + VERT_RESULT_TEX0;
|
||||
|
||||
/* Set empty writemask for instructions writing to vp_wpos_attr
|
||||
* before moving the wpos attr there.
|
||||
* Such instructions will be removed by DCE.
|
||||
*/
|
||||
rc_move_output(&compiler.Base, vp_wpos_attr, vp->key.WPosAttr, 0);
|
||||
rc_copy_output(&compiler.Base, VERT_RESULT_HPOS, vp_wpos_attr);
|
||||
}
|
||||
|
||||
if (vp->key.FogAttr != FRAG_ATTRIB_MAX) {
|
||||
rc_move_output(&compiler.Base,
|
||||
VERT_RESULT_FOGC,
|
||||
vp->key.FogAttr - FRAG_ATTRIB_TEX0 + VERT_RESULT_TEX0, WRITEMASK_X);
|
||||
unsigned int vp_fog_attr = vp->key.FogAttr - FRAG_ATTRIB_TEX0 + VERT_RESULT_TEX0;
|
||||
|
||||
/* Set empty writemask for instructions writing to vp_fog_attr
|
||||
* before moving the fog attr there.
|
||||
* Such instructions will be removed by DCE.
|
||||
*/
|
||||
rc_move_output(&compiler.Base, vp_fog_attr, vp->key.FogAttr, 0);
|
||||
rc_move_output(&compiler.Base, VERT_RESULT_FOGC, vp_fog_attr, WRITEMASK_X);
|
||||
}
|
||||
|
||||
r3xx_compile_vertex_program(&compiler);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue