Module: wine Branch: master Commit: 337c5d2730a02ee94fb97aa0df011f791d6b3f06 URL: http://source.winehq.org/git/wine.git/?a=commit;h=337c5d2730a02ee94fb97aa0df...
Author: Rico Schüller kgbricola@web.de Date: Wed May 5 19:01:54 2010 +0200
d3d10: Implement ID3D10Effect::GetVariableBySemantic().
---
dlls/d3d10/effect.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index c43f88a..016e842 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -2220,9 +2220,48 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_GetVariableB static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_GetVariableBySemantic(ID3D10Effect *iface, LPCSTR semantic) { - FIXME("iface %p, semantic %s stub!\n", iface, debugstr_a(semantic)); + struct d3d10_effect *This = (struct d3d10_effect *)iface; + unsigned int i; + + TRACE("iface %p, semantic %s\n", iface, debugstr_a(semantic)); + + if (!semantic) + { + WARN("Invalid semantic specified\n"); + return (ID3D10EffectVariable *)&null_variable; + }
- return NULL; + for (i = 0; i < This->local_buffer_count; ++i) + { + struct d3d10_effect_variable *l = &This->local_buffers[i]; + unsigned int j; + + for (j = 0; j < l->type->member_count; ++j) + { + struct d3d10_effect_variable *v = &l->members[j]; + + if (!strcmp(v->semantic, semantic)) + { + TRACE("Returning variable %p.\n", v); + return (ID3D10EffectVariable *)v; + } + } + } + + for (i = 0; i < This->local_variable_count; ++i) + { + struct d3d10_effect_variable *v = &This->local_variables[i]; + + if (!strcmp(v->semantic, semantic)) + { + TRACE("Returning variable %p.\n", v); + return (ID3D10EffectVariable *)v; + } + } + + WARN("Invalid semantic specified\n"); + + return (ID3D10EffectVariable *)&null_variable; }
static struct ID3D10EffectTechnique * STDMETHODCALLTYPE d3d10_effect_GetTechniqueByIndex(ID3D10Effect *iface,