st/nine: Initial mixed vertex processing support
authorAxel Davy <axel.davy@ens.fr>
Thu, 15 Sep 2016 21:00:02 +0000 (23:00 +0200)
committerAxel Davy <axel.davy@ens.fr>
Mon, 10 Oct 2016 21:43:49 +0000 (23:43 +0200)
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 <axel.davy@ens.fr>
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/nine/device9.h

index 075ed7c0f479bebe04fe348c837ff3551459861d..2ec8cb6f2019f50597400815ba39c7eac5ac9a01 100644 (file)
@@ -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
index d584a3558ab89abcafc4e8d83e393d0af06cc398..8eedfe132fed8996937ae6708c37a16be160e3ae 100644 (file)
@@ -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 )