From ef47f8d336684da93119c0b06cf1167b752ea8cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rico=20Sch=C3=BCller?= Date: Sun, 24 Jan 2010 14:25:42 +0100 Subject: [PATCH] d3d10: Parse shaders in parse_fx10_local_variable(). --- dlls/d3d10/effect.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index 20eccb5ba1e..3e7f21d55dc 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -306,6 +306,9 @@ static HRESULT parse_shader(struct d3d10_effect_variable *v, const char *data) read_dword(&ptr, &dxbc_size); TRACE("dxbc size: %#x\n", dxbc_size); + /* We got a shader VertexShader vs = NULL, so it is fine to skip this. */ + if (!dxbc_size) return S_OK; + switch (v->type->basetype) { case D3D10_SVT_VERTEXSHADER: @@ -1208,16 +1211,26 @@ static HRESULT parse_fx10_local_variable(struct d3d10_effect_variable *v, const case D3D10_SVT_VERTEXSHADER: case D3D10_SVT_PIXELSHADER: case D3D10_SVT_GEOMETRYSHADER: - TRACE("SVT is a shader.\n"); + TRACE("Shader type is %s\n", debug_d3d10_shader_variable_type(v->type->basetype)); for (i = 0; i < max(v->type->element_count, 1); ++i) { DWORD shader_offset; + struct d3d10_effect_variable *var; + + if (!v->type->element_count) + { + var = v; + } + else + { + var = &v->elements[i]; + } - /* - * TODO: Parse the shader - */ read_dword(ptr, &shader_offset); - FIXME("Shader offset: %#x.\n", shader_offset); + TRACE("Shader offset: %#x.\n", shader_offset); + + hr = parse_shader(var, data + shader_offset); + if (FAILED(hr)) return hr; } break; -- 2.11.4.GIT