Nikolay Sivov : d3d10/effect: Release technique names on Optimize().

Alexandre Julliard julliard at winehq.org
Wed Sep 15 16:21:31 CDT 2021


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Sep 12 16:37:00 2021 +0300

d3d10/effect: Release technique names on Optimize().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3d10/effect.c       |  6 ++++++
 dlls/d3d10/tests/effect.c | 17 +++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 6d2f862f252..d850928248a 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -3435,6 +3435,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_Optimize(ID3D10Effect *iface)
         v->u.shader.stream_output_declaration = NULL;
     }
 
+    for (i = 0; i < effect->technique_count; ++i)
+    {
+        heap_free(effect->techniques[i].name);
+        effect->techniques[i].name = NULL;
+    }
+
     return S_OK;
 }
 
diff --git a/dlls/d3d10/tests/effect.c b/dlls/d3d10/tests/effect.c
index 5e548a96172..ca96e6c20a2 100644
--- a/dlls/d3d10/tests/effect.c
+++ b/dlls/d3d10/tests/effect.c
@@ -5996,6 +5996,8 @@ static void test_effect_optimize(void)
 {
     D3D10_EFFECT_SHADER_DESC shaderdesc;
     ID3D10EffectShaderVariable *gs;
+    D3D10_TECHNIQUE_DESC tech_desc;
+    ID3D10EffectTechnique *tech;
     ID3D10EffectVariable *v;
     ID3D10Effect *effect;
     ID3D10Device *device;
@@ -6011,6 +6013,11 @@ static void test_effect_optimize(void)
     hr = create_effect(fx_local_shader, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "Failed to create an effect.\n");
 
+    tech = effect->lpVtbl->GetTechniqueByIndex(effect, 0);
+    hr = tech->lpVtbl->GetDesc(tech, &tech_desc);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(!strcmp(tech_desc.Name, "Render"), "Unexpected technique name %s.\n", tech_desc.Name);
+
     v = effect->lpVtbl->GetVariableByName(effect, "g_so");
 
     gs = v->lpVtbl->AsShader(v);
@@ -6038,6 +6045,16 @@ static void test_effect_optimize(void)
     ok(!shaderdesc.NumInputSignatureEntries, "Unexpected input signature count.\n");
     ok(!shaderdesc.NumOutputSignatureEntries, "Unexpected output signature count.\n");
 
+    hr = tech->lpVtbl->GetDesc(tech, &tech_desc);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(!tech_desc.Name, "Unexpected technique name %p.\n", tech_desc.Name);
+
+    tech = effect->lpVtbl->GetTechniqueByIndex(effect, 0);
+    ok(tech->lpVtbl->IsValid(tech), "Unexpected valid technique.\n");
+
+    tech = effect->lpVtbl->GetTechniqueByName(effect, "Render");
+    ok(!tech->lpVtbl->IsValid(tech), "Unexpected valid technique.\n");
+
     effect->lpVtbl->Release(effect);
 
     refcount = ID3D10Device_Release(device);




More information about the wine-cvs mailing list