Module: wine Branch: master Commit: 4e27a7d81c6a21f61d6d3b9df351807c10382561 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4e27a7d81c6a21f61d6d3b9df3... Author: H. Verbeet <hverbeet(a)gmail.com> Date: Thu Jun 7 23:52:48 2007 +0200 wined3d: For ps_2_0 and higher, call shader_get_registers_used() in IWineD3DPixelShaderImpl_SetFunction. --- dlls/wined3d/pixelshader.c | 31 +++++++++++++++++++++++-------- 1 files changed, 23 insertions(+), 8 deletions(-) diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c index 1cab706..a8bc50b 100644 --- a/dlls/wined3d/pixelshader.c +++ b/dlls/wined3d/pixelshader.c @@ -501,6 +501,18 @@ static HRESULT WINAPI IWineD3DPixelShaderImpl_SetFunction(IWineD3DPixelShader *i list_init(&This->baseShader.constantsB); list_init(&This->baseShader.constantsI); + if (WINED3DSHADER_VERSION_MAJOR(This->baseShader.hex_version) > 1) { + shader_reg_maps *reg_maps = &This->baseShader.reg_maps; + HRESULT hr; + + /* Second pass: figure out which registers are used, what the semantics are, etc.. */ + memset(reg_maps, 0, sizeof(shader_reg_maps)); + hr = shader_get_registers_used((IWineD3DBaseShader*) This, reg_maps, + This->semantics_in, NULL, pFunction, NULL); + if (FAILED(hr)) return hr; + /* FIXME: validate reg_maps against OpenGL */ + } + This->baseShader.shader_mode = deviceImpl->ps_selected_mode; TRACE("(%p) : Copying the function\n", This); @@ -523,8 +535,6 @@ static HRESULT WINAPI IWineD3DPixelShaderImpl_CompileShader(IWineD3DPixelShader IWineD3DPixelShaderImpl *This =(IWineD3DPixelShaderImpl *)iface; IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device; CONST DWORD *function = This->baseShader.function; - shader_reg_maps *reg_maps = &This->baseShader.reg_maps; - HRESULT hr; TRACE("(%p) : function %p\n", iface, function); @@ -537,12 +547,17 @@ static HRESULT WINAPI IWineD3DPixelShaderImpl_CompileShader(IWineD3DPixelShader return WINED3D_OK; } - /* Second pass: figure out which registers are used, what the semantics are, etc.. */ - memset(reg_maps, 0, sizeof(shader_reg_maps)); - hr = shader_get_registers_used((IWineD3DBaseShader*) This, reg_maps, - This->semantics_in, NULL, This->baseShader.function, deviceImpl->stateBlock); - if (hr != WINED3D_OK) return hr; - /* FIXME: validate reg_maps against OpenGL */ + if (WINED3DSHADER_VERSION_MAJOR(This->baseShader.hex_version) == 1) { + shader_reg_maps *reg_maps = &This->baseShader.reg_maps; + HRESULT hr; + + /* Second pass: figure out which registers are used, what the semantics are, etc.. */ + memset(reg_maps, 0, sizeof(shader_reg_maps)); + hr = shader_get_registers_used((IWineD3DBaseShader*)This, reg_maps, + This->semantics_in, NULL, This->baseShader.function, deviceImpl->stateBlock); + if (FAILED(hr)) return hr; + /* FIXME: validate reg_maps against OpenGL */ + } /* Generate the HW shader */ TRACE("(%p) : Generating hardware program\n", This);