From 725ebc4657d27349ed586e5c178d5b1a971587cd Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Sun, 26 Jan 2020 20:40:00 +0100 Subject: [PATCH] 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 Part-of: --- 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, -- 2.30.2