From bbeddb801e0ad953a06862412ecd5b8bed51ab5c Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Sun, 23 Sep 2018 16:45:30 +0200 Subject: [PATCH] st/nine: Mark transform matrices dirty for D3DSBT_ALL D3DSBT_ALL stateblocks capture the transform matrices. Fixes some d3d test programs not displaying properly. Signed-off-by: Axel Davy --- 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 3b17458..25a8172 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.7.4