Module: wine Branch: master Commit: 51a9810693a0b052b33618b1018abddbdf35ba31 URL: http://source.winehq.org/git/wine.git/?a=commit;h=51a9810693a0b052b33618b101...
Author: Stefan Dösinger stefan@codeweavers.com Date: Thu Jan 4 00:13:15 2007 +0100
wined3d: Move decoding the streams to their own inline function.
---
dlls/wined3d/state.c | 54 +++++++++++++++++++++++++++---------------------- 1 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 38d7883..1ab686f 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -1973,36 +1973,15 @@ static void transform_projection(DWORD s } }
-static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock) { - BOOL useVertexShaderFunction = FALSE, updateFog = FALSE; - BOOL transformed; - /* Some stuff is in the device until we have per context tracking */ +/* Helper for vertexdeclaration() */ +static inline void handleStreams(IWineD3DStateBlockImpl *stateblock, BOOL useVertexShaderFunction) { IWineD3DDeviceImpl *device = stateblock->wineD3DDevice; - BOOL wasrhw = device->last_was_rhw; - - device->streamFixedUp = FALSE; - - /* Shaders can be implemented using ARB_PROGRAM, GLSL, or software - - * here simply check whether a shader was set, or the user disabled shaders - */ - if (device->vs_selected_mode != SHADER_NONE && stateblock->vertexShader && - ((IWineD3DVertexShaderImpl *)stateblock->vertexShader)->baseShader.function != NULL) { - useVertexShaderFunction = TRUE; - - if(((IWineD3DVertexShaderImpl *)stateblock->vertexShader)->usesFog != device->last_was_foggy_shader) { - updateFog = TRUE; - } - } else if(device->last_was_foggy_shader) { - updateFog = TRUE; - }
if(device->up_strided) { - /* Note: this is a ddraw fixed-function code path */ TRACE("================ Strided Input ===================\n"); memcpy(&device->strided_streams, device->up_strided, sizeof(device->strided_streams)); - } - else if (stateblock->vertexDecl || stateblock->vertexShader) { + } else if (stateblock->vertexDecl || stateblock->vertexShader) { /* Note: This is a fixed function or shader codepath. * This means it must handle both types of strided data. * Shaders must go through here to zero the strided data, even if they @@ -2027,6 +2006,33 @@ static void vertexdeclaration(DWORD stat primitiveConvertToStridedData((IWineD3DDevice *) device, &device->strided_streams, &device->streamFixedUp); } +} + +static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock) { + BOOL useVertexShaderFunction = FALSE, updateFog = FALSE; + BOOL transformed; + /* Some stuff is in the device until we have per context tracking */ + IWineD3DDeviceImpl *device = stateblock->wineD3DDevice; + BOOL wasrhw = device->last_was_rhw; + + device->streamFixedUp = FALSE; + + /* Shaders can be implemented using ARB_PROGRAM, GLSL, or software - + * here simply check whether a shader was set, or the user disabled shaders + */ + if (device->vs_selected_mode != SHADER_NONE && stateblock->vertexShader && + ((IWineD3DVertexShaderImpl *)stateblock->vertexShader)->baseShader.function != NULL) { + useVertexShaderFunction = TRUE; + + if(((IWineD3DVertexShaderImpl *)stateblock->vertexShader)->usesFog != device->last_was_foggy_shader) { + updateFog = TRUE; + } + } else if(device->last_was_foggy_shader) { + updateFog = TRUE; + } + + handleStreams(stateblock, useVertexShaderFunction); + /* Do I have to use ? TRUE : FALSE ? Or can I rely on 15==15 beeing equal to TRUE(=1)? */ transformed = ((device->strided_streams.u.s.position.lpData != NULL || device->strided_streams.u.s.position.VBO != 0) &&