Connor McAdams : d3dcompiler: Init reflection data in D3D10ReflectShader().

Alexandre Julliard julliard at winehq.org
Wed Nov 6 16:54:29 CST 2019


Module: wine
Branch: master
Commit: 0ffd0cab011a52964bbf519ae90e46bf765c8fc0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0ffd0cab011a52964bbf519ae90e46bf765c8fc0

Author: Connor McAdams <conmanx360 at gmail.com>
Date:   Wed Nov  6 10:06:33 2019 +0100

d3dcompiler: Init reflection data in D3D10ReflectShader().

Signed-off-by: Connor McAdams <conmanx360 at gmail.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3dcompiler_43/reflection.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/d3dcompiler_43/reflection.c b/dlls/d3dcompiler_43/reflection.c
index 2ea0b46a1c..6f98217385 100644
--- a/dlls/d3dcompiler_43/reflection.c
+++ b/dlls/d3dcompiler_43/reflection.c
@@ -1694,9 +1694,6 @@ static HRESULT d3dcompiler_shader_reflection_init(struct d3dcompiler_shader_refl
     HRESULT hr;
     unsigned int i;
 
-    reflection->ID3D11ShaderReflection_iface.lpVtbl = &d3dcompiler_shader_reflection_vtbl;
-    reflection->refcount = 1;
-
     wine_rb_init(&reflection->types, d3dcompiler_shader_reflection_type_compare);
 
     hr = dxbc_parse(data, data_size, &src_dxbc);
@@ -1921,8 +1918,9 @@ static const struct ID3D10ShaderReflectionVtbl d3d10_shader_reflection_vtbl =
 HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector)
 {
     struct d3dcompiler_shader_reflection *object;
+    HRESULT hr;
 
-    FIXME("data %p, data_size %lu, reflector %p stub!\n", data, data_size, reflector);
+    TRACE("data %p, data_size %lu, reflector %p.\n", data, data_size, reflector);
 
     if (!(object = heap_alloc_zero(sizeof(*object))))
     {
@@ -1933,6 +1931,14 @@ HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10Shad
     object->ID3D10ShaderReflection_iface.lpVtbl = &d3d10_shader_reflection_vtbl;
     object->refcount = 1;
 
+    hr = d3dcompiler_shader_reflection_init(object, data, data_size);
+    if (FAILED(hr))
+    {
+        WARN("Failed to initialize shader reflection.\n");
+        HeapFree(GetProcessHeap(), 0, object);
+        return hr;
+    }
+
     *reflector = &object->ID3D10ShaderReflection_iface;
 
     TRACE("Created ID3D10ShaderReflection %p.\n", object);
@@ -1971,6 +1977,9 @@ HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void
     if (!object)
         return E_OUTOFMEMORY;
 
+    object->ID3D11ShaderReflection_iface.lpVtbl = &d3dcompiler_shader_reflection_vtbl;
+    object->refcount = 1;
+
     hr = d3dcompiler_shader_reflection_init(object, data, data_size);
     if (FAILED(hr))
     {




More information about the wine-cvs mailing list