[PATCH 2/7] d3d10/tests: Add some tests for annotations.
Nikolay Sivov
nsivov at codeweavers.com
Fri Oct 8 00:13:31 CDT 2021
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/d3d10/tests/effect.c | 231 +++++++++++++++++++++++++++++++++++++-
1 file changed, 230 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d10/tests/effect.c b/dlls/d3d10/tests/effect.c
index 6ad3f7421f4..6724fcd4992 100644
--- a/dlls/d3d10/tests/effect.c
+++ b/dlls/d3d10/tests/effect.c
@@ -6097,18 +6097,149 @@ static void test_effect_resource_variable(void)
ok(!refcount, "Device has %u references left.\n", refcount);
}
+#if 0
+cbuffer cb <string s = "cb_a"; >
+{
+ float f1 : COLOR0 <string s = "f1_a"; >;
+};
+
+BlendState blendstate <string s = "bs_a"; >;
+Texture2D tex <string s = "tex_a"; >;
+PixelShader ps <string s = "ps_a"; >;
+VertexShader vs <string s = "vs_a"; >;
+GeometryShader gs <string s = "gs_a"; >;
+DepthStencilState ds <string s = "ds_a"; >;
+RasterizerState rs <string s = "rs_a"; >;
+SamplerState s <string s = "s_a"; >;
+RenderTargetView rtv <string s = "rtv_a"; >;
+DepthStencilView dsv <string s = "dsv_a"; >;
+
+technique10 tech <string s = "tech_a"; >
+{
+ pass P0 <string s = "P0_a"; >
+ {
+ }
+};
+#endif
+static DWORD fx_test_annotations[] =
+{
+ 0x43425844, 0x2b3e08d4, 0xe3eda7bb, 0x36982de8, 0x0dcab1aa, 0x00000001, 0x000004c6, 0x00000001,
+ 0x00000024, 0x30315846, 0x0000049a, 0xfeff1001, 0x00000001, 0x00000001, 0x0000000a, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000001, 0x00000276, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
+ 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000003, 0x00000000, 0x00000000, 0x53006263,
+ 0x6e697274, 0x00070067, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000,
+ 0x00730000, 0x615f6263, 0x6f6c6600, 0x31007461, 0x01000000, 0x00000000, 0x04000000, 0x10000000,
+ 0x04000000, 0x09000000, 0x66000009, 0x4f430031, 0x30524f4c, 0x5f316600, 0x6c420061, 0x53646e65,
+ 0x65746174, 0x00006200, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
+ 0x656c6200, 0x7473646e, 0x00657461, 0x615f7362, 0x78655400, 0x65727574, 0x99004432, 0x02000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0c000000, 0x74000000, 0x74007865, 0x615f7865,
+ 0x78695000, 0x68536c65, 0x72656461, 0x0000c900, 0x00000200, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000500, 0x00737000, 0x615f7370, 0x72655600, 0x53786574, 0x65646168, 0x00f90072,
+ 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00060000, 0x73760000, 0x5f737600,
+ 0x65470061, 0x74656d6f, 0x68537972, 0x72656461, 0x00012a00, 0x00000200, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000700, 0x00736700, 0x615f7367, 0x70654400, 0x74536874, 0x69636e65,
+ 0x6174536c, 0x5d006574, 0x02000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03000000,
+ 0x64000000, 0x73640073, 0x5200615f, 0x65747361, 0x657a6972, 0x61745372, 0x93006574, 0x02000001,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000, 0x72000000, 0x73720073, 0x5300615f,
+ 0x6c706d61, 0x74537265, 0x00657461, 0x000001c7, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000015, 0x00615f73, 0x646e6552, 0x61547265, 0x74656772, 0x77656956, 0x0001f400,
+ 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001300, 0x76747200, 0x76747200,
+ 0x4400615f, 0x68747065, 0x6e657453, 0x566c6963, 0x00776569, 0x0000022b, 0x00000002, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000014, 0x00767364, 0x5f767364, 0x65740061, 0x74006863,
+ 0x5f686365, 0x30500061, 0x5f305000, 0x00040061, 0x00100000, 0x00000000, 0x00010000, 0xffff0000,
+ 0x0001ffff, 0x002a0000, 0x000e0000, 0x002c0000, 0x00530000, 0x00370000, 0x00560000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00010000, 0x002a0000, 0x000e0000, 0x005d0000, 0x00890000, 0x006d0000,
+ 0x00000000, 0xffff0000, 0x0000ffff, 0x00010000, 0x002a0000, 0x000e0000, 0x00940000, 0x00bf0000,
+ 0x00a30000, 0x00000000, 0xffff0000, 0x0001ffff, 0x002a0000, 0x000e0000, 0x00c30000, 0x00f10000,
+ 0x00d50000, 0x00000000, 0xffff0000, 0x0000ffff, 0x00010000, 0x002a0000, 0x000e0000, 0x00f40000,
+ 0x01220000, 0x01060000, 0x00000000, 0xffff0000, 0x0000ffff, 0x00010000, 0x002a0000, 0x000e0000,
+ 0x01250000, 0x01550000, 0x01390000, 0x00000000, 0xffff0000, 0x0000ffff, 0x00010000, 0x002a0000,
+ 0x000e0000, 0x01580000, 0x018b0000, 0x016f0000, 0x00000000, 0xffff0000, 0x0000ffff, 0x00010000,
+ 0x002a0000, 0x000e0000, 0x018e0000, 0x01bf0000, 0x01a30000, 0x00000000, 0xffff0000, 0x0000ffff,
+ 0x00010000, 0x002a0000, 0x000e0000, 0x01c20000, 0x002a0000, 0x01d40000, 0x00000000, 0xffff0000,
+ 0x0000ffff, 0x00010000, 0x002a0000, 0x000e0000, 0x01f00000, 0x02210000, 0x02050000, 0x00000000,
+ 0xffff0000, 0x0001ffff, 0x002a0000, 0x000e0000, 0x02250000, 0x02580000, 0x023c0000, 0x00000000,
+ 0xffff0000, 0x0001ffff, 0x002a0000, 0x000e0000, 0x025c0000, 0x02620000, 0x00010000, 0x00010000,
+ 0x002a0000, 0x000e0000, 0x02670000, 0x026e0000, 0x00000000, 0x00010000, 0x002a0000, 0x000e0000,
+ 0x02710000, 0x00000000,
+};
+
+static void test_effect_annotations(void)
+{
+ D3D10_EFFECT_VARIABLE_DESC var_desc;
+ ID3D10EffectConstantBuffer *cb;
+ D3D10_EFFECT_DESC effect_desc;
+ ID3D10EffectTechnique *tech;
+ ID3D10EffectVariable *v, *a;
+ ID3D10EffectPass *pass;
+ ID3D10Effect *effect;
+ ID3D10Device *device;
+ ULONG i, refcount;
+ HRESULT hr;
+
+ if (!(device = create_device()))
+ {
+ skip("Failed to create device, skipping tests.\n");
+ return;
+ }
+
+ hr = create_effect(fx_test_annotations, 0, device, NULL, &effect);
+ ok(SUCCEEDED(hr), "Failed to create an effect.\n");
+
+ cb = effect->lpVtbl->GetConstantBufferByName(effect, "cb");
+ a = cb->lpVtbl->GetAnnotationByName(cb, "s");
+ ok(a->lpVtbl->IsValid(a), "Expected valid variable.\n");
+ a = cb->lpVtbl->GetAnnotationByName(cb, "S");
+ ok(!a->lpVtbl->IsValid(a), "Unexpected valid variable.\n");
+
+ effect->lpVtbl->GetDesc(effect, &effect_desc);
+ for (i = 0; i < effect_desc.GlobalVariables; ++i)
+ {
+ v = effect->lpVtbl->GetVariableByIndex(effect, i);
+ hr = v->lpVtbl->GetDesc(v, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(var_desc.Annotations == 1, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = v->lpVtbl->GetAnnotationByName(v, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+ a = cb->lpVtbl->GetAnnotationByName(cb, "S");
+ ok(!a->lpVtbl->IsValid(a), "Unexpected valid variable.\n");
+ }
+
+ tech = effect->lpVtbl->GetTechniqueByIndex(effect, 0);
+ ok(tech->lpVtbl->IsValid(tech), "Expected valid technique.\n");
+ a = tech->lpVtbl->GetAnnotationByName(tech, "s");
+ ok(a->lpVtbl->IsValid(a), "Expected valid variable.\n");
+ a = tech->lpVtbl->GetAnnotationByName(tech, "S");
+ ok(!a->lpVtbl->IsValid(a), "Unexpected valid variable.\n");
+
+ pass = tech->lpVtbl->GetPassByIndex(tech, 0);
+ ok(pass->lpVtbl->IsValid(pass), "Expected valid technique.\n");
+ a = pass->lpVtbl->GetAnnotationByName(pass, "s");
+ ok(a->lpVtbl->IsValid(a), "Expected valid variable.\n");
+ a = pass->lpVtbl->GetAnnotationByName(pass, "S");
+ ok(!a->lpVtbl->IsValid(a), "Unexpected valid variable.\n");
+
+ effect->lpVtbl->Release(effect);
+
+ refcount = ID3D10Device_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+}
+
static void test_effect_optimize(void)
{
D3D10_EFFECT_SHADER_DESC shaderdesc;
+ D3D10_EFFECT_VARIABLE_DESC var_desc;
+ ID3D10EffectConstantBuffer *cb;
ID3D10EffectShaderVariable *gs;
D3D10_TECHNIQUE_DESC tech_desc;
+ D3D10_EFFECT_DESC effect_desc;
ID3D10EffectTechnique *tech;
D3D10_PASS_DESC pass_desc;
ID3D10EffectVariable *v;
ID3D10EffectPass *pass;
ID3D10Effect *effect;
ID3D10Device *device;
- ULONG refcount;
+ ULONG i, refcount;
HRESULT hr;
BOOL ret;
@@ -6187,6 +6318,103 @@ static void test_effect_optimize(void)
effect->lpVtbl->Release(effect);
+ /* Annotations are stripped. */
+ hr = create_effect(fx_test_annotations, 0, device, NULL, &effect);
+ ok(SUCCEEDED(hr), "Failed to create an effect.\n");
+
+ cb = effect->lpVtbl->GetConstantBufferByName(effect, "cb");
+ hr = cb->lpVtbl->GetDesc(cb, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(var_desc.Annotations == 1, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = cb->lpVtbl->GetAnnotationByName(cb, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+
+ effect->lpVtbl->GetDesc(effect, &effect_desc);
+
+ for (i = 0; i < effect_desc.GlobalVariables; ++i)
+ {
+ v = effect->lpVtbl->GetVariableByIndex(effect, i);
+ hr = v->lpVtbl->GetDesc(v, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(var_desc.Annotations == 1, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = v->lpVtbl->GetAnnotationByName(v, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+ }
+
+ tech = effect->lpVtbl->GetTechniqueByIndex(effect, 0);
+ hr = tech->lpVtbl->GetDesc(tech, &tech_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(tech_desc.Annotations == 1, "Unexpected annotations count %u.\n", tech_desc.Annotations);
+ v = tech->lpVtbl->GetAnnotationByName(tech, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+
+ pass = tech->lpVtbl->GetPassByIndex(tech, 0);
+ ok(pass->lpVtbl->IsValid(pass), "Expected valid technique.\n");
+ hr = pass->lpVtbl->GetDesc(pass, &pass_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(pass_desc.Annotations == 1, "Unexpected annotations count %u.\n", pass_desc.Annotations);
+ v = pass->lpVtbl->GetAnnotationByName(pass, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+
+ effect->lpVtbl->GetDesc(effect, &effect_desc);
+
+ for (i = 0; i < effect_desc.GlobalVariables; ++i)
+ {
+ v = effect->lpVtbl->GetVariableByIndex(effect, i);
+ hr = v->lpVtbl->GetDesc(v, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(var_desc.Annotations == 1, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = v->lpVtbl->GetAnnotationByName(v, "s");
+ ok(v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+ }
+
+ hr = effect->lpVtbl->Optimize(effect);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ cb = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
+ hr = cb->lpVtbl->GetDesc(cb, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine {
+ ok(!var_desc.Annotations, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = cb->lpVtbl->GetAnnotationByName(cb, "s");
+ ok(!v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+}
+
+ effect->lpVtbl->GetDesc(effect, &effect_desc);
+
+ for (i = 0; i < effect_desc.GlobalVariables; ++i)
+ {
+ v = effect->lpVtbl->GetVariableByIndex(effect, i);
+ hr = v->lpVtbl->GetDesc(v, &var_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ todo_wine {
+ ok(!var_desc.Annotations, "Unexpected annotations count %u.\n", var_desc.Annotations);
+ v = v->lpVtbl->GetAnnotationByName(v, "s");
+ ok(!v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+ }
+ }
+
+ tech = effect->lpVtbl->GetTechniqueByIndex(effect, 0);
+ hr = tech->lpVtbl->GetDesc(tech, &tech_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine {
+ ok(!tech_desc.Annotations, "Unexpected annotations count %u.\n", tech_desc.Annotations);
+ v = tech->lpVtbl->GetAnnotationByName(tech, "s");
+ ok(!v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+}
+
+ pass = tech->lpVtbl->GetPassByIndex(tech, 0);
+ ok(pass->lpVtbl->IsValid(pass), "Expected valid technique.\n");
+ hr = pass->lpVtbl->GetDesc(pass, &pass_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+todo_wine {
+ ok(!pass_desc.Annotations, "Unexpected annotations count %u.\n", pass_desc.Annotations);
+ v = pass->lpVtbl->GetAnnotationByName(pass, "s");
+ ok(!v->lpVtbl->IsValid(v), "Expected valid variable.\n");
+}
+
+ effect->lpVtbl->Release(effect);
+
refcount = ID3D10Device_Release(device);
ok(!refcount, "Device has %u references left.\n", refcount);
}
@@ -7019,6 +7247,7 @@ START_TEST(effect)
test_effect_vector_variable();
test_effect_matrix_variable();
test_effect_resource_variable();
+ test_effect_annotations();
test_effect_optimize();
test_effect_shader_description();
test_effect_shader_object();
--
2.33.0
More information about the wine-devel
mailing list