[Mesa-dev] [PATCH 20/22] st/nine: Capture also default matrices for D3DSBT_ALL
Axel Davy
davyaxel0 at gmail.com
Sun Sep 23 17:00:25 UTC 2018
We avoid allocating space for never unused matrices.
However we must do as if we had captured them.
Thus when a D3DSBT_ALL stateblock apply has fewer matrices
than device state, allocate the default matrices for the stateblock
before applying.
Signed-off-by: Axel Davy <davyaxel0 at gmail.com>
---
src/gallium/state_trackers/nine/stateblock9.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/gallium/state_trackers/nine/stateblock9.c b/src/gallium/state_trackers/nine/stateblock9.c
index ebfd622ff91..fd6f5d55677 100644
--- a/src/gallium/state_trackers/nine/stateblock9.c
+++ b/src/gallium/state_trackers/nine/stateblock9.c
@@ -494,6 +494,16 @@ nine_state_copy_common_all(struct NineDevice9 *device,
src->ff.num_transforms * sizeof(src->ff.transform[0]));
dst->ff.num_transforms = src->ff.num_transforms;
}
+ /* Alloc and init missing transforms */
+ if (dst->ff.num_transforms > src->ff.num_transforms) {
+ int last_index = dst->ff.num_transforms - 1;
+ /* There a hole in the indices we fill */
+ if (last_index >= 10)
+ last_index += D3DTS_WORLDMATRIX(0);
+ (void) nine_state_access_transform((struct nine_ff_state *)&src->ff,
+ last_index,
+ TRUE);
+ }
memcpy(dst->ff.transform,
src->ff.transform, src->ff.num_transforms * sizeof(D3DMATRIX));
if (apply) /* TODO: memset */
--
2.18.0
More information about the mesa-dev
mailing list