Rico Schüller : d3d10: Parse shaders in parse_fx10_local_variable().
Alexandre Julliard
julliard at winehq.org
Mon Jan 25 11:21:11 CST 2010
Module: wine
Branch: master
Commit: ef47f8d336684da93119c0b06cf1167b752ea8cb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ef47f8d336684da93119c0b06cf1167b752ea8cb
Author: Rico Schüller <kgbricola at web.de>
Date: Sun Jan 24 14:25:42 2010 +0100
d3d10: Parse shaders in parse_fx10_local_variable().
---
dlls/d3d10/effect.c | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 20eccb5..3e7f21d 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;
More information about the wine-cvs
mailing list