D3DSBT_ALL stateblocks capture the transform matrices. Fixes some d3d test programs not displaying properly.
Signed-off-by: Axel Davy <davyax...@gmail.com> --- Notice without the previous patch, D3DSBT_ALL stateblocks would send hundreds of identity matrices to the context every apply. src/gallium/state_trackers/nine/device9.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 3b174587a44..25a8172b3fd 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -2376,13 +2376,24 @@ NineDevice9_CreateStateBlock( struct NineDevice9 *This, NINE_STATE_IDXBUF | NINE_STATE_FF_MATERIAL | NINE_STATE_BLEND_COLOR | - NINE_STATE_SAMPLE_MASK; + NINE_STATE_SAMPLE_MASK | + NINE_STATE_FF_VSTRANSF; memset(dst->changed.rs, ~0, (D3DRS_COUNT / 32) * sizeof(uint32_t)); dst->changed.rs[D3DRS_LAST / 32] |= (1 << (D3DRS_COUNT % 32)) - 1; dst->changed.vtxbuf = (1ULL << This->caps.MaxStreams) - 1; dst->changed.stream_freq = dst->changed.vtxbuf; dst->changed.ucp = (1 << PIPE_MAX_CLIP_PLANES) - 1; dst->changed.texture = (1 << NINE_MAX_SAMPLERS) - 1; + /* The doc says the projection, world, view and texture matrices + * are saved, which would translate to: + * dst->ff.changed.transform[0] = 0x00FF000C; + * dst->ff.changed.transform[D3DTS_WORLD / 32] |= 1 << (D3DTS_WORLD % 32); + * However we assume they meant save everything (which is basically just the + * above plus the other world matrices). + */ + dst->ff.changed.transform[0] = 0x00FF000C; + for (s = 0; s < 8; s++) + dst->ff.changed.transform[8+s] = ~0; } NineStateBlock9_Capture(NineStateBlock9(*ppSB)); -- 2.19.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev