[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