Mesa (master): st/nine: Fix a crash if the state is not initialized

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 15 15:58:37 UTC 2020


Module: Mesa
Branch: master
Commit: 725ebc4657d27349ed586e5c178d5b1a971587cd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=725ebc4657d27349ed586e5c178d5b1a971587cd

Author: Axel Davy <davyaxel0 at gmail.com>
Date:   Sun Jan 26 20:40:00 2020 +0100

st/nine: Fix a crash if the state is not initialized

I don't remember exactly the conditions of the crash,
but I had a trace which was crashing in the gallium driver
before doing any rendering (something about viewports being not initialized).

It's not the first time we hit such a problem, so rather than investigating
that crash, I chose to just initialize every states at device creation.

Signed-off-by: Axel Davy <davyaxel0 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5015>

---

 src/gallium/frontends/nine/device9.c    | 1 +
 src/gallium/frontends/nine/nine_state.c | 6 ++++++
 src/gallium/frontends/nine/nine_state.h | 1 +
 3 files changed, 8 insertions(+)

diff --git a/src/gallium/frontends/nine/device9.c b/src/gallium/frontends/nine/device9.c
index fd8e9274327..b18695deadc 100644
--- a/src/gallium/frontends/nine/device9.c
+++ b/src/gallium/frontends/nine/device9.c
@@ -517,6 +517,7 @@ NineDevice9_ctor( struct NineDevice9 *This,
     nine_state_init_sw(This);
 
     ID3DPresentGroup_Release(This->present);
+    nine_context_update_state(This); /* Some drivers needs states to be initialized */
     nine_csmt_process(This);
 
     return D3D_OK;
diff --git a/src/gallium/frontends/nine/nine_state.c b/src/gallium/frontends/nine/nine_state.c
index 8724ec87c81..90de3dd80f3 100644
--- a/src/gallium/frontends/nine/nine_state.c
+++ b/src/gallium/frontends/nine/nine_state.c
@@ -2935,6 +2935,12 @@ nine_context_clear(struct NineDevice9 *device)
     }
 }
 
+void
+nine_context_update_state(struct NineDevice9 *device)
+{
+    nine_update_state(device);
+}
+
 void
 nine_state_init_sw(struct NineDevice9 *device)
 {
diff --git a/src/gallium/frontends/nine/nine_state.h b/src/gallium/frontends/nine/nine_state.h
index d8fa2f80c4d..d497a79c49d 100644
--- a/src/gallium/frontends/nine/nine_state.h
+++ b/src/gallium/frontends/nine/nine_state.h
@@ -606,6 +606,7 @@ void nine_state_set_defaults(struct NineDevice9 *, const D3DCAPS9 *,
                              boolean is_reset);
 void nine_device_state_clear(struct NineDevice9 *);
 void nine_context_clear(struct NineDevice9 *);
+void nine_context_update_state(struct NineDevice9 *);
 
 void nine_state_init_sw(struct NineDevice9 *device);
 void nine_state_prepare_draw_sw(struct NineDevice9 *device,



More information about the mesa-commit mailing list