[PATCH 3/3] d3d10/effect: Partially implement ID3D10Effect::GetDesc().

Nikolay Sivov nsivov at codeweavers.com
Mon Aug 9 08:39:49 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/d3d10/effect.c       |  24 ++++-
 dlls/d3d10/tests/effect.c | 195 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 217 insertions(+), 2 deletions(-)

diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 552a4a664fb..9d8fdc383b2 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -3101,9 +3101,29 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_GetDevice(ID3D10Effect *iface, ID3
 
 static HRESULT STDMETHODCALLTYPE d3d10_effect_GetDesc(ID3D10Effect *iface, D3D10_EFFECT_DESC *desc)
 {
-    FIXME("iface %p, desc %p stub!\n", iface, desc);
+    struct d3d10_effect *effect = impl_from_ID3D10Effect(iface);
+    unsigned int i;
 
-    return E_NOTIMPL;
+    FIXME("iface %p, desc %p.\n", iface, desc);
+
+    if (!desc)
+        return E_INVALIDARG;
+
+    /* FIXME */
+    desc->IsChildEffect = FALSE;
+    desc->SharedConstantBuffers = 0;
+    desc->SharedGlobalVariables = 0;
+
+    desc->ConstantBuffers = effect->local_buffer_count;
+    desc->Techniques = effect->technique_count;
+    desc->GlobalVariables = effect->local_variable_count;
+    for (i = 0; i < effect->local_buffer_count; ++i)
+    {
+        struct d3d10_effect_variable *l = &effect->local_buffers[i];
+        desc->GlobalVariables += l->type->member_count;
+    }
+
+    return S_OK;
 }
 
 static struct ID3D10EffectConstantBuffer * STDMETHODCALLTYPE d3d10_effect_GetConstantBufferByIndex(ID3D10Effect *iface,
diff --git a/dlls/d3d10/tests/effect.c b/dlls/d3d10/tests/effect.c
index cae16491993..f7dab3032f2 100644
--- a/dlls/d3d10/tests/effect.c
+++ b/dlls/d3d10/tests/effect.c
@@ -86,6 +86,7 @@ static void test_effect_constant_buffer_type(void)
     ID3D10EffectConstantBuffer *constantbuffer;
     ID3D10EffectType *type, *type2, *null_type;
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -101,6 +102,20 @@ static void test_effect_constant_buffer_type(void)
     hr = create_effect(fx_test_ecbt, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, NULL);
+    ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
+    hr = effect->lpVtbl->GetDesc(effect, &desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n", desc.ConstantBuffers);
+    ok(desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            desc.SharedConstantBuffers);
+    ok(desc.GlobalVariables == 2, "Unexpected global variables count %u.\n", desc.GlobalVariables);
+    ok(desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            desc.SharedGlobalVariables);
+    ok(desc.Techniques == 0, "Unexpected techniques count %u.\n", desc.Techniques);
+
     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
     type = constantbuffer->lpVtbl->GetType(constantbuffer);
 
@@ -259,6 +274,7 @@ static void test_effect_variable_type(void)
     ID3D10EffectVariable *variable;
     ID3D10EffectType *type, *type2, *type3;
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -274,6 +290,17 @@ static void test_effect_variable_type(void)
     hr = create_effect(fx_test_evt, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n", desc.ConstantBuffers);
+    ok(desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            desc.SharedConstantBuffers);
+    ok(desc.GlobalVariables == 1, "Unexpected global variables count %u.\n", desc.GlobalVariables);
+    ok(desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            desc.SharedGlobalVariables);
+    ok(desc.Techniques == 0, "Unexpected techniques count %u.\n", desc.Techniques);
+
     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
     type = constantbuffer->lpVtbl->GetType(constantbuffer);
     hr = type->lpVtbl->GetDesc(type, &type_desc);
@@ -492,6 +519,7 @@ static void test_effect_variable_member(void)
     ID3D10EffectConstantBuffer *constantbuffer;
     ID3D10EffectVariable *variable, *variable2, *variable3, *null_variable;
     D3D10_EFFECT_VARIABLE_DESC desc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -505,6 +533,19 @@ static void test_effect_variable_member(void)
     hr = create_effect(fx_test_evm, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 1, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
     hr = constantbuffer->lpVtbl->GetDesc(constantbuffer, &desc);
     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
@@ -693,6 +734,7 @@ static void test_effect_variable_element(void)
     ID3D10EffectType *type, *type2;
     D3D10_EFFECT_VARIABLE_DESC desc;
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -706,6 +748,19 @@ static void test_effect_variable_element(void)
     hr = create_effect(fx_test_eve, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 1, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
     hr = constantbuffer->lpVtbl->GetDesc(constantbuffer, &desc);
     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
@@ -1340,6 +1395,7 @@ static void test_effect_variable_type_class(void)
     ID3D10EffectType *type;
     D3D10_EFFECT_VARIABLE_DESC vd;
     D3D10_EFFECT_TYPE_DESC td;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -1355,6 +1411,19 @@ static void test_effect_variable_type_class(void)
     hr = create_effect(fx_test_evtc, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 21, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     /* get the null_constantbuffer, so that we can compare it to variables->GetParentConstantBuffer */
     null_buffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 1);
 
@@ -2365,6 +2434,7 @@ static void test_effect_constant_buffer_stride(void)
     ID3D10EffectConstantBuffer *constantbuffer;
     ID3D10EffectType *type;
     D3D10_EFFECT_TYPE_DESC tdesc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -2402,6 +2472,19 @@ static void test_effect_constant_buffer_stride(void)
     hr = create_effect(fx_test_ecbs, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 15, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 36, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     for (i=0; i<ARRAY_SIZE(tv_ecbs); i++)
     {
         constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, i);
@@ -2692,6 +2775,7 @@ static void test_effect_local_shader(void)
     D3D10_EFFECT_VARIABLE_DESC vdesc = {0};
     ID3D10EffectType *type;
     D3D10_EFFECT_TYPE_DESC typedesc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectShaderVariable *null_shader, *null_anon_vs, *null_anon_ps, *null_anon_gs,
         *p3_anon_vs, *p3_anon_ps, *p3_anon_gs, *p6_vs, *p6_ps, *p6_gs;
     ID3D10Device *device;
@@ -2706,6 +2790,19 @@ static void test_effect_local_shader(void)
     hr = create_effect(fx_local_shader, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed!\n");
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 0, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 6, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 1, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     null_technique = effect->lpVtbl->GetTechniqueByIndex(effect, 0xffffffff);
     null_pass = null_technique->lpVtbl->GetPassByIndex(null_technique, 0xffffffff);
 
@@ -3563,6 +3660,7 @@ static void test_effect_get_variable_by(void)
 {
     ID3D10Effect *effect;
     ID3D10EffectVariable *variable_by_index, *variable, *null_variable;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10Device *device;
     ULONG refcount;
     HRESULT hr;
@@ -3576,6 +3674,19 @@ static void test_effect_get_variable_by(void)
     hr = create_effect(fx_test_egvb, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 2, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 6, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     /* get the null variable */
     null_variable = effect->lpVtbl->GetVariableByIndex(effect, 0xffffffff);
 
@@ -3869,6 +3980,7 @@ static void test_effect_state_groups(void)
     D3D10_RASTERIZER_DESC rast_desc;
     D3D10_SAMPLER_DESC sampler_desc;
     ID3D10EffectSamplerVariable *s;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10BlendState *blend_state;
     UINT sample_mask, stencil_ref;
     ID3D10EffectBlendVariable *b;
@@ -3891,6 +4003,19 @@ static void test_effect_state_groups(void)
     hr = create_effect(fx_test_state_groups, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "Failed to create effect, hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 4, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 1, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     v = effect->lpVtbl->GetVariableByName(effect, "sampler0");
     s = v->lpVtbl->AsSampler(v);
     s->lpVtbl->GetBackingStore(s, 0, &sampler_desc);
@@ -4125,6 +4250,7 @@ static void test_effect_state_group_defaults(void)
     D3D10_RASTERIZER_DESC rast_desc;
     D3D10_SAMPLER_DESC sampler_desc;
     ID3D10EffectSamplerVariable *s;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectBlendVariable *b;
     D3D10_BLEND_DESC blend_desc;
     D3D10_PASS_DESC pass_desc;
@@ -4144,6 +4270,19 @@ static void test_effect_state_group_defaults(void)
     hr = create_effect(fx_test_state_group_defaults, 0, device, NULL, &effect);
     ok(SUCCEEDED(hr), "Failed to create effect, hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 4, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 1, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     v = effect->lpVtbl->GetVariableByName(effect, "sampler0");
     s = v->lpVtbl->AsSampler(v);
     memset(&sampler_desc, 0, sizeof(sampler_desc));
@@ -4567,6 +4706,7 @@ static void test_effect_scalar_variable(void)
         {"b_a", D3D10_SVT_BOOL, TRUE},
     };
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectScalarVariable *s_v;
     ID3D10EffectVariable *var;
     ID3D10EffectType *type;
@@ -4585,6 +4725,19 @@ static void test_effect_scalar_variable(void)
     hr = create_effect(fx_test_scalar_variable, 0, device, NULL, &effect);
     ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 6, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     /* Check each different scalar type, make sure the variable returned is
      * valid, set it to a value, and make sure what we get back is the same
      * as what we set it to. */
@@ -4967,6 +5120,7 @@ static void test_effect_vector_variable(void)
     };
     ID3D10EffectVectorVariable *v_var;
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectVariable *var;
     ID3D10EffectType *type;
     ID3D10Device *device;
@@ -4984,6 +5138,19 @@ static void test_effect_vector_variable(void)
     hr = create_effect(fx_test_vector_variable, 0, device, NULL, &effect);
     ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 6, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     for (i = 0; i < ARRAY_SIZE(tests); ++i)
     {
         var = effect->lpVtbl->GetVariableByName(effect, tests[i].name);
@@ -5299,6 +5466,7 @@ static void test_effect_matrix_variable(void)
     };
     ID3D10EffectMatrixVariable *m_var;
     D3D10_EFFECT_TYPE_DESC type_desc;
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectVariable *var;
     ID3D10EffectType *type;
     ID3D10Device *device;
@@ -5316,6 +5484,19 @@ static void test_effect_matrix_variable(void)
     hr = create_effect(fx_test_matrix_variable, 0, device, NULL, &effect);
     ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 1, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 5, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 0, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     for (i = 0; i < ARRAY_SIZE(tests); ++i)
     {
         var = effect->lpVtbl->GetVariableByName(effect, tests[i].name);
@@ -5467,6 +5648,7 @@ static void test_effect_resource_variable(void)
     ID3D10EffectShaderResourceVariable *t0, *t_a, *t_a_0;
     ID3D10EffectTechnique *technique;
     ID3D10Texture2D *tex0, *tex_a[2];
+    D3D10_EFFECT_DESC effect_desc;
     ID3D10EffectVariable *var;
     ID3D10EffectPass *pass;
     ID3D10Device *device;
@@ -5484,6 +5666,19 @@ static void test_effect_resource_variable(void)
     hr = create_effect(fx_test_resource_variable, 0, device, NULL, &effect);
     ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
 
+    hr = effect->lpVtbl->GetDesc(effect, &effect_desc);
+    ok(SUCCEEDED(hr), "Failed to get effect description, hr %#x.\n", hr);
+    ok(!effect_desc.IsChildEffect, "Unexpected IsChildEffect.\n");
+    ok(effect_desc.ConstantBuffers == 0, "Unexpected constant buffers count %u.\n",
+            effect_desc.ConstantBuffers);
+    ok(effect_desc.SharedConstantBuffers == 0, "Unexpected shared constant buffers count %u.\n",
+            effect_desc.SharedConstantBuffers);
+    ok(effect_desc.GlobalVariables == 2, "Unexpected global variables count %u.\n",
+            effect_desc.GlobalVariables);
+    ok(effect_desc.SharedGlobalVariables == 0, "Unexpected shared global variables count %u.\n",
+            effect_desc.SharedGlobalVariables);
+    ok(effect_desc.Techniques == 1, "Unexpected techniques count %u.\n", effect_desc.Techniques);
+
     var = effect->lpVtbl->GetVariableByName(effect, "t0");
     t0 = get_effect_shader_resource_variable(var);
     create_effect_texture_resource(device, &srv0, &tex0);
-- 
2.30.2




More information about the wine-devel mailing list