From 56ea3df7d437f3f4460992f18eae3dbf00af8ab9 Mon Sep 17 00:00:00 2001 From: Axel Davy Date: Thu, 15 Sep 2016 23:00:02 +0200 Subject: [PATCH] st/nine: Initial mixed vertex processing support In mixed vertex processing, the user can enable or disable software vertex processing. It is on hardware by default. This feature is not a state, and thus the setting doesn't need to be recorded by stateblocks. Signed-off-by: Axel Davy --- src/gallium/state_trackers/nine/device9.c | 18 +++++++++++++----- src/gallium/state_trackers/nine/device9.h | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 075ed7c0f47..2ec8cb6f201 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -165,10 +165,14 @@ NineDevice9_ctor( struct NineDevice9 *This, if (!(This->params.BehaviorFlags & D3DCREATE_FPU_PRESERVE)) nine_setup_fpu(); - if (This->params.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) - DBG("Application asked full Software Vertex Processing. Ignoring.\n"); + if (This->params.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING) { + DBG("Application asked full Software Vertex Processing.\n"); + This->swvp = true; + } else + This->swvp = false; if (This->params.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING) - DBG("Application asked mixed Software Vertex Processing. Ignoring.\n"); + DBG("Application asked mixed Software Vertex Processing.\n"); + /* TODO: check if swvp is resetted by device Resets */ This->pipe = This->screen->context_create(This->screen, NULL, 0); if (!This->pipe) { return E_OUTOFMEMORY; } /* guess */ @@ -2904,13 +2908,17 @@ HRESULT NINE_WINAPI NineDevice9_SetSoftwareVertexProcessing( struct NineDevice9 *This, BOOL bSoftware ) { - STUB(D3DERR_INVALIDCALL); + if (This->params.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING) { + This->swvp = bSoftware; + return D3D_OK; + } else + return D3DERR_INVALIDCALL; /* msdn. TODO: check in practice */ } BOOL NINE_WINAPI NineDevice9_GetSoftwareVertexProcessing( struct NineDevice9 *This ) { - return !!(This->params.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING); + return This->swvp; } HRESULT NINE_WINAPI diff --git a/src/gallium/state_trackers/nine/device9.h b/src/gallium/state_trackers/nine/device9.h index d584a3558ab..8eedfe132fe 100644 --- a/src/gallium/state_trackers/nine/device9.h +++ b/src/gallium/state_trackers/nine/device9.h @@ -144,6 +144,9 @@ struct NineDevice9 int minor_version_num; long long available_texture_mem; long long available_texture_limit; + + /* software vertex processing */ + boolean swvp; }; static inline struct NineDevice9 * NineDevice9( void *data ) -- 2.30.2