From fcca7ff38a6ba923abd910f50a8e2bcf6560e6ae Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Sun, 16 Aug 2015 14:59:52 +0200 Subject: [PATCH] st/nine: Revert to userbuf path when needed Automatically switch to userbuf path when we would need to upload fog or bumpmat constants Signed-off-by: Axel Davy --- src/gallium/state_trackers/nine/nine_state.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index 53efa56d081..e185b025134 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -61,6 +61,9 @@ prepare_rasterizer(struct NineDevice9 *device) device->state.commit |= NINE_STATE_COMMIT_RASTERIZER; } +static void +prepare_ps_constants_userbuf(struct NineDevice9 *device); + #define DO_UPLOAD_CONST_F(buf,p,c,d) \ do { \ DBG("upload ConstantF [%u .. %u]\n", x, (x) + (c) - 1); \ @@ -122,6 +125,14 @@ upload_constants(struct NineDevice9 *device, unsigned shader_type) device->state.changed.group &= ~NINE_STATE_VS_CONST; } else { DBG("PS\n"); + /* features only implemented on the userbuf path */ + if (device->state.ps->bumpenvmat_needed || ( + device->state.ps->byte_code.version < 0x30 && + device->state.rs[D3DRS_FOGENABLE])) { + device->prefer_user_constbuf = TRUE; + prepare_ps_constants_userbuf(device); + return; + } buf = device->constbuf_ps; const_f = device->state.ps_const_f; -- 2.11.0