1 /* 2 * Copyright 2010 Rico Schüller 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 /* 20 * Nearly all compiler functions need the shader blob and the size. The size 21 * is always located at DWORD #6 in the shader blob (blob[6]). 22 * The functions are e.g.: D3DGet*SignatureBlob, D3DReflect 23 */ 24 25 #define COBJMACROS 26 #include "initguid.h" 27 #include "d3dcompiler.h" 28 #include "wine/test.h" 29 30 /* includes for older reflection interfaces */ 31 #ifndef __REACTOS__ 32 #include "d3d10.h" 33 #include "d3d10_1shader.h" 34 #endif 35 36 /* 37 * This doesn't belong here, but for some functions it is possible to return that value, 38 * see http://msdn.microsoft.com/en-us/library/bb205278%28v=VS.85%29.aspx 39 * The original definition is in D3DX10core.h. 40 */ 41 #define D3DERR_INVALIDCALL 0x8876086c 42 43 static HRESULT (WINAPI *pD3DReflect)(const void *, SIZE_T, REFIID, void **); 44 45 /* Creator string for comparison - Version 9.29.952.3111 (43) */ 46 static DWORD shader_creator[] = { 47 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 48 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 49 }; 50 51 /* 52 * fxc.exe /E VS /Tvs_4_0 /Fx 53 */ 54 #if 0 55 float4 VS(float4 position : POSITION, float4 pos : SV_POSITION) : SV_POSITION 56 { 57 return position; 58 } 59 #endif 60 61 #ifndef __REACTOS__ 62 63 static DWORD test_reflection_blob[] = { 64 0x43425844, 0x77c6324f, 0xfd27948a, 0xe6958d31, 0x53361cba, 0x00000001, 0x000001d8, 0x00000005, 65 0x00000034, 0x0000008c, 0x000000e4, 0x00000118, 0x0000015c, 0x46454452, 0x00000050, 0x00000000, 66 0x00000000, 0x00000000, 0x0000001c, 0xfffe0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f, 67 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 68 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 69 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x00000041, 0x00000000, 0x00000000, 70 0x00000003, 0x00000001, 0x0000000f, 0x49534f50, 0x4e4f4954, 0x5f565300, 0x49534f50, 0x4e4f4954, 71 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 72 0x00000003, 0x00000000, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x52444853, 0x0000003c, 73 0x00010040, 0x0000000f, 0x0300005f, 0x001010f2, 0x00000000, 0x04000067, 0x001020f2, 0x00000000, 74 0x00000001, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e, 0x54415453, 75 0x00000074, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 76 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 77 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 78 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 79 }; 80 81 static void test_reflection_references(void) 82 { 83 HRESULT hr; 84 ULONG count; 85 ID3D11ShaderReflection *ref11, *ref11_test; 86 ID3D10ShaderReflection *ref10; 87 ID3D10ShaderReflection1 *ref10_1; 88 89 hr = pD3DReflect(test_reflection_blob, test_reflection_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 90 ok(hr == S_OK, "D3DReflect failed, got %x, expected %x\n", hr, S_OK); 91 92 hr = ref11->lpVtbl->QueryInterface(ref11, &IID_ID3D11ShaderReflection, (void **)&ref11_test); 93 ok(hr == S_OK, "QueryInterface failed, got %x, expected %x\n", hr, S_OK); 94 95 count = ref11_test->lpVtbl->Release(ref11_test); 96 ok(count == 1, "Release failed %u\n", count); 97 98 hr = ref11->lpVtbl->QueryInterface(ref11, &IID_ID3D10ShaderReflection, (void **)&ref10); 99 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x\n", hr, E_NOINTERFACE); 100 101 hr = ref11->lpVtbl->QueryInterface(ref11, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 102 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x\n", hr, E_NOINTERFACE); 103 104 count = ref11->lpVtbl->Release(ref11); 105 ok(count == 0, "Release failed %u\n", count); 106 107 /* check invalid cases */ 108 hr = pD3DReflect(test_reflection_blob, test_reflection_blob[6], &IID_ID3D10ShaderReflection, (void **)&ref10); 109 ok(hr == E_NOINTERFACE, "D3DReflect failed, got %x, expected %x\n", hr, E_NOINTERFACE); 110 111 hr = pD3DReflect(test_reflection_blob, test_reflection_blob[6], &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 112 ok(hr == E_NOINTERFACE, "D3DReflect failed, got %x, expected %x\n", hr, E_NOINTERFACE); 113 114 hr = pD3DReflect(NULL, test_reflection_blob[6], &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 115 ok(hr == D3DERR_INVALIDCALL, "D3DReflect failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL); 116 117 hr = pD3DReflect(NULL, test_reflection_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 118 ok(hr == D3DERR_INVALIDCALL, "D3DReflect failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL); 119 120 /* returns different errors with different sizes */ 121 hr = pD3DReflect(test_reflection_blob, 31, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 122 ok(hr == D3DERR_INVALIDCALL, "D3DReflect failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL); 123 124 hr = pD3DReflect(test_reflection_blob, 32, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 125 ok(hr == E_FAIL, "D3DReflect failed, got %x, expected %x\n", hr, E_FAIL); 126 127 hr = pD3DReflect(test_reflection_blob, test_reflection_blob[6]-1, &IID_ID3D10ShaderReflection1, (void **)&ref10_1); 128 ok(hr == E_FAIL, "D3DReflect failed, got %x, expected %x\n", hr, E_FAIL); 129 130 hr = pD3DReflect(test_reflection_blob, 31, &IID_ID3D11ShaderReflection, (void **)&ref11); 131 ok(hr == D3DERR_INVALIDCALL, "D3DReflect failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL); 132 133 hr = pD3DReflect(test_reflection_blob, 32, &IID_ID3D11ShaderReflection, (void **)&ref11); 134 ok(hr == E_FAIL, "D3DReflect failed, got %x, expected %x\n", hr, E_FAIL); 135 136 hr = pD3DReflect(test_reflection_blob, test_reflection_blob[6]-1, &IID_ID3D11ShaderReflection, (void **)&ref11); 137 ok(hr == E_FAIL, "D3DReflect failed, got %x, expected %x\n", hr, E_FAIL); 138 } 139 140 #endif /* !__REACTOS__ */ 141 142 /* 143 * fxc.exe /E VS /Tvs_4_1 /Fx 144 */ 145 #if 0 146 struct vsin 147 { 148 float4 x : SV_position; 149 float4 a : BINORMAL; 150 uint b : BLENDINDICES; 151 float c : BLENDWEIGHT; 152 float4 d : COLOR; 153 float4 d1 : COLOR1; 154 float4 e : NORMAL; 155 float4 f : POSITION; 156 float4 g : POSITIONT; 157 float h : PSIZE; 158 float4 i : TANGENT; 159 float4 j : TEXCOORD; 160 uint k : SV_VertexID; 161 uint l : SV_InstanceID; 162 float m : testin; 163 }; 164 struct vsout 165 { 166 float4 x : SV_position; 167 float4 a : COLOR0; 168 float b : FOG; 169 float4 c : POSITION0; 170 float d : PSIZE; 171 float e : TESSFACTOR0; 172 float4 f : TEXCOORD0; 173 float g : SV_ClipDistance0; 174 float h : SV_CullDistance0; 175 uint i : SV_InstanceID; 176 float j : testout; 177 }; 178 vsout VS(vsin x) 179 { 180 vsout s; 181 s.x = float4(1.6f, 0.3f, 0.1f, 0.0f); 182 int y = 1; 183 int p[5] = {1, 2, 3, 5, 4}; 184 y = y << (int) x.x.x & 0xf; 185 s.x.x = p[y]; 186 s.a = x.d; 187 s.b = x.c; 188 s.c = x.f; 189 s.d = x.h; 190 s.e = x.h; 191 s.f = x.j; 192 s.g = 1.0f; 193 s.h = 1.0f; 194 s.i = 2; 195 s.j = x.m; 196 return s; 197 } 198 #endif 199 static DWORD test_reflection_desc_vs_blob[] = { 200 0x43425844, 0xb65955ac, 0xcea1cb75, 0x06c5a1ad, 0x8a555fa1, 0x00000001, 0x0000076c, 0x00000005, 201 0x00000034, 0x0000008c, 0x0000028c, 0x00000414, 0x000006f0, 0x46454452, 0x00000050, 0x00000000, 202 0x00000000, 0x00000000, 0x0000001c, 0xfffe0401, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f, 203 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 204 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x000001f8, 0x0000000f, 0x00000008, 0x00000170, 205 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000010f, 0x0000017c, 0x00000000, 0x00000000, 206 0x00000003, 0x00000001, 0x0000000f, 0x00000185, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 207 0x00000001, 0x00000192, 0x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000101, 0x0000019e, 208 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x00000f0f, 0x0000019e, 0x00000001, 0x00000000, 209 0x00000003, 0x00000005, 0x0000000f, 0x000001a4, 0x00000000, 0x00000000, 0x00000003, 0x00000006, 210 0x0000000f, 0x000001ab, 0x00000000, 0x00000000, 0x00000003, 0x00000007, 0x00000f0f, 0x000001b4, 211 0x00000000, 0x00000000, 0x00000003, 0x00000008, 0x0000000f, 0x000001be, 0x00000000, 0x00000000, 212 0x00000003, 0x00000009, 0x00000101, 0x000001c4, 0x00000000, 0x00000000, 0x00000003, 0x0000000a, 213 0x0000000f, 0x000001cc, 0x00000000, 0x00000000, 0x00000003, 0x0000000b, 0x00000f0f, 0x000001d5, 214 0x00000000, 0x00000006, 0x00000001, 0x0000000c, 0x00000001, 0x000001e1, 0x00000000, 0x00000008, 215 0x00000001, 0x0000000d, 0x00000001, 0x000001ef, 0x00000000, 0x00000000, 0x00000003, 0x0000000e, 216 0x00000101, 0x705f5653, 0x7469736f, 0x006e6f69, 0x4f4e4942, 0x4c414d52, 0x454c4200, 0x4e49444e, 217 0x45434944, 0x4c420053, 0x57444e45, 0x48474945, 0x4f430054, 0x00524f4c, 0x4d524f4e, 0x50004c41, 218 0x5449534f, 0x004e4f49, 0x49534f50, 0x4e4f4954, 0x53500054, 0x00455a49, 0x474e4154, 0x00544e45, 219 0x43584554, 0x44524f4f, 0x5f565300, 0x74726556, 0x44497865, 0x5f565300, 0x74736e49, 0x65636e61, 220 0x74004449, 0x69747365, 0xabab006e, 0x4e47534f, 0x00000180, 0x0000000b, 0x00000008, 0x00000110, 221 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000011c, 0x00000000, 0x00000000, 222 0x00000003, 0x00000001, 0x0000000f, 0x00000122, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 223 0x00000e01, 0x00000126, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000d02, 0x0000012c, 224 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000b04, 0x00000137, 0x00000000, 0x00000000, 225 0x00000003, 0x00000002, 0x00000708, 0x0000013f, 0x00000000, 0x00000000, 0x00000003, 0x00000003, 226 0x0000000f, 0x00000148, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x0000000f, 0x00000151, 227 0x00000000, 0x00000002, 0x00000003, 0x00000005, 0x00000e01, 0x00000161, 0x00000000, 0x00000003, 228 0x00000003, 0x00000005, 0x00000d02, 0x00000171, 0x00000000, 0x00000000, 0x00000001, 0x00000006, 229 0x00000e01, 0x705f5653, 0x7469736f, 0x006e6f69, 0x4f4c4f43, 0x4f460052, 0x53500047, 0x00455a49, 230 0x53534554, 0x54434146, 0x7400524f, 0x6f747365, 0x50007475, 0x5449534f, 0x004e4f49, 0x43584554, 231 0x44524f4f, 0x5f565300, 0x70696c43, 0x74736944, 0x65636e61, 0x5f565300, 0x6c6c7543, 0x74736944, 232 0x65636e61, 0x5f565300, 0x74736e49, 0x65636e61, 0xab004449, 0x52444853, 0x000002d4, 0x00010041, 233 0x000000b5, 0x0100086a, 0x0300005f, 0x00101012, 0x00000000, 0x0300005f, 0x00101012, 0x00000003, 234 0x0300005f, 0x001010f2, 0x00000004, 0x0300005f, 0x001010f2, 0x00000007, 0x0300005f, 0x00101012, 235 0x00000009, 0x0300005f, 0x001010f2, 0x0000000b, 0x0300005f, 0x00101012, 0x0000000e, 0x04000067, 236 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x001020f2, 0x00000001, 0x03000065, 0x00102012, 237 0x00000002, 0x03000065, 0x00102022, 0x00000002, 0x03000065, 0x00102042, 0x00000002, 0x03000065, 238 0x00102082, 0x00000002, 0x03000065, 0x001020f2, 0x00000003, 0x03000065, 0x001020f2, 0x00000004, 239 0x04000067, 0x00102012, 0x00000005, 0x00000002, 0x04000067, 0x00102022, 0x00000005, 0x00000003, 240 0x03000065, 0x00102012, 0x00000006, 0x02000068, 0x00000001, 0x04000069, 0x00000000, 0x00000005, 241 0x00000004, 0x06000036, 0x00203012, 0x00000000, 0x00000000, 0x00004001, 0x00000001, 0x06000036, 242 0x00203012, 0x00000000, 0x00000001, 0x00004001, 0x00000002, 0x06000036, 0x00203012, 0x00000000, 243 0x00000002, 0x00004001, 0x00000003, 0x06000036, 0x00203012, 0x00000000, 0x00000003, 0x00004001, 244 0x00000005, 0x06000036, 0x00203012, 0x00000000, 0x00000004, 0x00004001, 0x00000004, 0x0500001b, 245 0x00100012, 0x00000000, 0x0010100a, 0x00000000, 0x07000029, 0x00100012, 0x00000000, 0x00004001, 246 0x00000001, 0x0010000a, 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, 247 0x00004001, 0x0000000f, 0x07000036, 0x00100012, 0x00000000, 0x0420300a, 0x00000000, 0x0010000a, 248 0x00000000, 0x0500002b, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x08000036, 0x001020e2, 249 0x00000000, 0x00004002, 0x00000000, 0x3e99999a, 0x3dcccccd, 0x00000000, 0x05000036, 0x001020f2, 250 0x00000001, 0x00101e46, 0x00000004, 0x05000036, 0x00102012, 0x00000002, 0x0010100a, 0x00000003, 251 0x05000036, 0x00102062, 0x00000002, 0x00101006, 0x00000009, 0x05000036, 0x00102082, 0x00000002, 252 0x0010100a, 0x0000000e, 0x05000036, 0x001020f2, 0x00000003, 0x00101e46, 0x00000007, 0x05000036, 253 0x001020f2, 0x00000004, 0x00101e46, 0x0000000b, 0x05000036, 0x00102012, 0x00000005, 0x00004001, 254 0x3f800000, 0x05000036, 0x00102022, 0x00000005, 0x00004001, 0x3f800000, 0x05000036, 0x00102012, 255 0x00000006, 0x00004001, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000015, 0x00000001, 256 0x00000000, 0x00000012, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 257 0x00000005, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 258 0x00000000, 0x0000000a, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 259 0x00000000, 0x00000000, 0x00000000, 260 }; 261 262 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_vs_resultin[] = 263 { 264 {"SV_position", 0, 0, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x1, 0}, 265 {"BINORMAL", 0, 1, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 266 {"BLENDINDICES", 0, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0x0, 0}, 267 {"BLENDWEIGHT", 0, 3, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0x1, 0}, 268 {"COLOR", 0, 4, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0xf, 0}, 269 {"COLOR", 1, 5, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 270 {"NORMAL", 0, 6, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 271 {"POSITION", 0, 7, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0xf, 0}, 272 {"POSITIONT", 0, 8, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 273 {"PSIZE", 0, 9, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0x1, 0}, 274 {"TANGENT", 0, 10, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 275 {"TEXCOORD", 0, 11, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0xf, 0}, 276 {"SV_VertexID", 0, 12, D3D_NAME_VERTEX_ID, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0x0, 0}, 277 {"SV_InstanceID", 0, 13, D3D_NAME_INSTANCE_ID, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0x0, 0}, 278 {"testin", 0, 14, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0x1, 0}, 279 }; 280 281 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_vs_resultout[] = 282 { 283 {"SV_position", 0, 0, D3D_NAME_POSITION, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 284 {"COLOR", 0, 1, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 285 {"FOG", 0, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 286 {"PSIZE", 0, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x2, 0xd, 0}, 287 {"TESSFACTOR", 0, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x4, 0xb, 0}, 288 {"testout", 0, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x8, 0x7, 0}, 289 {"POSITION", 0, 3, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 290 {"TEXCOORD", 0, 4, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 291 {"SV_ClipDistance", 0, 5, D3D_NAME_CLIP_DISTANCE, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 292 {"SV_CullDistance", 0, 5, D3D_NAME_CULL_DISTANCE, D3D_REGISTER_COMPONENT_FLOAT32, 0x2, 0xd, 0}, 293 {"SV_InstanceID", 0, 6, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0xe, 0}, 294 }; 295 296 static void test_reflection_desc_vs(void) 297 { 298 HRESULT hr; 299 ULONG count; 300 ID3D11ShaderReflection *ref11; 301 D3D11_SHADER_DESC sdesc11 = {0}; 302 D3D11_SIGNATURE_PARAMETER_DESC desc = {0}; 303 const D3D11_SIGNATURE_PARAMETER_DESC *pdesc; 304 UINT ret; 305 unsigned int i; 306 307 hr = pD3DReflect(test_reflection_desc_vs_blob, test_reflection_desc_vs_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 308 ok(hr == S_OK, "D3DReflect failed %x\n", hr); 309 310 hr = ref11->lpVtbl->GetDesc(ref11, NULL); 311 ok(hr == E_FAIL, "GetDesc failed %x\n", hr); 312 313 hr = ref11->lpVtbl->GetDesc(ref11, &sdesc11); 314 ok(hr == S_OK, "GetDesc failed %x\n", hr); 315 316 ok(sdesc11.Version == 65601, "GetDesc failed, got %u, expected %u\n", sdesc11.Version, 65601); 317 ok(strcmp(sdesc11.Creator, (char*) shader_creator) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc11.Creator, (char*)shader_creator); 318 ok(sdesc11.Flags == 256, "GetDesc failed, got %u, expected %u\n", sdesc11.Flags, 256); 319 ok(sdesc11.ConstantBuffers == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.ConstantBuffers, 0); 320 ok(sdesc11.BoundResources == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.BoundResources, 0); 321 ok(sdesc11.InputParameters == 15, "GetDesc failed, got %u, expected %u\n", sdesc11.InputParameters, 15); 322 ok(sdesc11.OutputParameters == 11, "GetDesc failed, got %u, expected %u\n", sdesc11.OutputParameters, 11); 323 ok(sdesc11.InstructionCount == 21, "GetDesc failed, got %u, expected %u\n", sdesc11.InstructionCount, 21); 324 ok(sdesc11.TempRegisterCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc11.TempRegisterCount, 1); 325 ok(sdesc11.TempArrayCount == 5, "GetDesc failed, got %u, expected %u\n", sdesc11.TempArrayCount, 5); 326 ok(sdesc11.DefCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.DefCount, 0); 327 ok(sdesc11.DclCount == 18, "GetDesc failed, got %u, expected %u\n", sdesc11.DclCount, 18); 328 ok(sdesc11.TextureNormalInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureNormalInstructions, 0); 329 ok(sdesc11.TextureLoadInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureLoadInstructions, 0); 330 ok(sdesc11.TextureCompInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureCompInstructions, 0); 331 ok(sdesc11.TextureBiasInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureBiasInstructions, 0); 332 ok(sdesc11.TextureGradientInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureGradientInstructions, 0); 333 ok(sdesc11.FloatInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.FloatInstructionCount, 0); 334 ok(sdesc11.IntInstructionCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc11.IntInstructionCount, 1); 335 ok(sdesc11.UintInstructionCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc11.UintInstructionCount, 1); 336 ok(sdesc11.StaticFlowControlCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc11.StaticFlowControlCount, 1); 337 ok(sdesc11.DynamicFlowControlCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.DynamicFlowControlCount, 0); 338 ok(sdesc11.MacroInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.MacroInstructionCount, 0); 339 ok(sdesc11.ArrayInstructionCount == 6, "GetDesc failed, got %u, expected %u\n", sdesc11.ArrayInstructionCount, 6); 340 ok(sdesc11.CutInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.CutInstructionCount, 0); 341 ok(sdesc11.EmitInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.EmitInstructionCount, 0); 342 ok(sdesc11.GSOutputTopology == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.GSOutputTopology, 0); 343 ok(sdesc11.GSMaxOutputVertexCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.GSMaxOutputVertexCount, 0); 344 ok(sdesc11.InputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.InputPrimitive, 0); 345 ok(sdesc11.PatchConstantParameters == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.PatchConstantParameters, 0); 346 ok(sdesc11.cGSInstanceCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cGSInstanceCount, 0); 347 ok(sdesc11.cControlPoints == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cControlPoints, 0); 348 ok(sdesc11.HSOutputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.HSOutputPrimitive, 0); 349 ok(sdesc11.HSPartitioning == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.HSPartitioning, 0); 350 ok(sdesc11.TessellatorDomain == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.TessellatorDomain, 0); 351 ok(sdesc11.cBarrierInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cBarrierInstructions, 0); 352 ok(sdesc11.cInterlockedInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cInterlockedInstructions, 0); 353 ok(sdesc11.cTextureStoreInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cTextureStoreInstructions, 0); 354 355 ret = ref11->lpVtbl->GetBitwiseInstructionCount(ref11); 356 ok(ret == 0, "GetBitwiseInstructionCount failed, got %u, expected %u\n", ret, 0); 357 358 ret = ref11->lpVtbl->GetConversionInstructionCount(ref11); 359 ok(ret == 2, "GetConversionInstructionCount failed, got %u, expected %u\n", ret, 2); 360 361 ret = ref11->lpVtbl->GetMovInstructionCount(ref11); 362 ok(ret == 10, "GetMovInstructionCount failed, got %u, expected %u\n", ret, 10); 363 364 ret = ref11->lpVtbl->GetMovcInstructionCount(ref11); 365 ok(ret == 0, "GetMovcInstructionCount failed, got %u, expected %u\n", ret, 0); 366 367 /* GetIn/OutputParameterDesc */ 368 for (i = 0; i < ARRAY_SIZE(test_reflection_desc_vs_resultin); ++i) 369 { 370 pdesc = &test_reflection_desc_vs_resultin[i]; 371 372 hr = ref11->lpVtbl->GetInputParameterDesc(ref11, i, &desc); 373 ok(hr == S_OK, "GetInputParameterDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 374 375 ok(!strcmp(desc.SemanticName, pdesc->SemanticName), "GetInputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n", 376 i, desc.SemanticName, pdesc->SemanticName); 377 ok(desc.SemanticIndex == pdesc->SemanticIndex, "GetInputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n", 378 i, desc.SemanticIndex, pdesc->SemanticIndex); 379 ok(desc.Register == pdesc->Register, "GetInputParameterDesc(%u) Register failed, got %u, expected %u\n", 380 i, desc.Register, pdesc->Register); 381 ok(desc.SystemValueType == pdesc->SystemValueType, "GetInputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n", 382 i, desc.SystemValueType, pdesc->SystemValueType); 383 ok(desc.ComponentType == pdesc->ComponentType, "GetInputParameterDesc(%u) ComponentType failed, got %x, expected %x\n", 384 i, desc.ComponentType, pdesc->ComponentType); 385 ok(desc.Mask == pdesc->Mask, "GetInputParameterDesc(%u) Mask failed, got %x, expected %x\n", 386 i, desc.Mask, pdesc->Mask); 387 ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "GetInputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n", 388 i, desc.ReadWriteMask, pdesc->ReadWriteMask); 389 ok(desc.Stream == pdesc->Stream, "GetInputParameterDesc(%u) Stream failed, got %u, expected %u\n", 390 i, desc.Stream, pdesc->ReadWriteMask); 391 } 392 393 for (i = 0; i < ARRAY_SIZE(test_reflection_desc_vs_resultout); ++i) 394 { 395 pdesc = &test_reflection_desc_vs_resultout[i]; 396 397 hr = ref11->lpVtbl->GetOutputParameterDesc(ref11, i, &desc); 398 ok(hr == S_OK, "GetOutputParameterDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 399 400 ok(!strcmp(desc.SemanticName, pdesc->SemanticName), "GetOutputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n", 401 i, desc.SemanticName, pdesc->SemanticName); 402 ok(desc.SemanticIndex == pdesc->SemanticIndex, "GetOutputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n", 403 i, desc.SemanticIndex, pdesc->SemanticIndex); 404 ok(desc.Register == pdesc->Register, "GetOutputParameterDesc(%u) Register failed, got %u, expected %u\n", 405 i, desc.Register, pdesc->Register); 406 ok(desc.SystemValueType == pdesc->SystemValueType, "GetOutputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n", 407 i, desc.SystemValueType, pdesc->SystemValueType); 408 ok(desc.ComponentType == pdesc->ComponentType, "GetOutputParameterDesc(%u) ComponentType failed, got %x, expected %x\n", 409 i, desc.ComponentType, pdesc->ComponentType); 410 ok(desc.Mask == pdesc->Mask, "GetOutputParameterDesc(%u) Mask failed, got %x, expected %x\n", 411 i, desc.Mask, pdesc->Mask); 412 ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "GetOutputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n", 413 i, desc.ReadWriteMask, pdesc->ReadWriteMask); 414 ok(desc.Stream == pdesc->Stream, "GetOutputParameterDesc(%u) Stream failed, got %u, expected %u\n", 415 i, desc.Stream, pdesc->ReadWriteMask); 416 } 417 418 count = ref11->lpVtbl->Release(ref11); 419 ok(count == 0, "Release failed %u\n", count); 420 } 421 422 /* 423 * fxc.exe /E PS /Tps_4_1 /Fx 424 */ 425 #if 0 426 Texture2D tex1; 427 Texture2D tex2; 428 SamplerState sam 429 { 430 Filter = MIN_MAG_MIP_LINEAR; 431 AddressU = Wrap; 432 AddressV = Wrap; 433 }; 434 SamplerComparisonState samc 435 { 436 Filter = MIN_MAG_MIP_LINEAR; 437 AddressU = w1; 438 AddressV = Wrap; 439 ComparisonFunc = LESS; 440 }; 441 struct psin 442 { 443 uint f : SV_RenderTargetArrayIndex; 444 uint g : SV_InstanceID; 445 uint h : SV_PrimitiveID; 446 float2 uv : TEXCOORD; 447 float4 a : COLOR3; 448 float b : VFACE; 449 float4 c : SV_position; 450 bool d : SV_Coverage; 451 bool e : SV_IsFrontFace; 452 }; 453 struct psout 454 { 455 float a : SV_Target1; 456 float b : SV_Depth; 457 float x : SV_Target; 458 bool c : SV_Coverage; 459 }; 460 psout PS(psin p) 461 { 462 psout a; 463 float4 x = tex1.Sample(sam, p.uv); 464 x += tex1.SampleCmp(samc, p.uv, 0.3f); 465 if (x.y < 0.1f) 466 x += tex2.SampleCmp(samc, p.uv, 0.4f); 467 else if (x.y < 0.2f) 468 x += tex2.SampleCmp(samc, p.uv, 0.1f); 469 else if (x.y < 0.3f) 470 x += tex2.SampleBias(sam, p.uv, 0.1f); 471 else if (x.y < 0.4f) 472 x += tex2.SampleBias(sam, p.uv, 0.2f); 473 else if (x.y < 0.5f) 474 x += tex2.SampleBias(sam, p.uv, 0.3f); 475 else 476 x += tex2.SampleBias(sam, p.uv, 0.4f); 477 x += tex2.SampleGrad(sam, p.uv, x.xy, x.xy); 478 x += tex2.SampleGrad(sam, p.uv, x.xz, x.xz); 479 x += tex2.SampleGrad(sam, p.uv, x.xz, x.zy); 480 x += tex2.SampleGrad(sam, p.uv, x.xz, x.zw); 481 x += tex2.SampleGrad(sam, p.uv, x.xz, x.wz); 482 a.a = x.y; 483 a.b = x.x; 484 a.x = x.x; 485 a.c = true; 486 return a; 487 } 488 #endif 489 static DWORD test_reflection_desc_ps_blob[] = { 490 0x43425844, 0x19e2f325, 0xf1ec39a3, 0x3c5a8b53, 0x5bd5fb65, 0x00000001, 0x000008d0, 0x00000005, 491 0x00000034, 0x0000011c, 0x00000254, 0x000002e4, 0x00000854, 0x46454452, 0x000000e0, 0x00000000, 492 0x00000000, 0x00000004, 0x0000001c, 0xffff0401, 0x00000100, 0x000000af, 0x0000009c, 0x00000003, 493 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a0, 0x00000003, 494 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x000000a5, 0x00000002, 495 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000c, 0x000000aa, 0x00000002, 496 0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000c, 0x006d6173, 0x636d6173, 497 0x78657400, 0x65740031, 0x4d003278, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 498 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x4e475349, 499 0x00000130, 0x00000008, 0x00000008, 0x000000c8, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 500 0x00000001, 0x000000e2, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000002, 0x000000f0, 501 0x00000000, 0x00000007, 0x00000001, 0x00000000, 0x00000004, 0x000000ff, 0x00000000, 0x00000009, 502 0x00000001, 0x00000000, 0x00000008, 0x0000010e, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 503 0x00000303, 0x00000117, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000004, 0x0000011d, 504 0x00000003, 0x00000000, 0x00000003, 0x00000002, 0x0000000f, 0x00000123, 0x00000000, 0x00000001, 505 0x00000003, 0x00000003, 0x0000000f, 0x525f5653, 0x65646e65, 0x72615472, 0x41746567, 0x79617272, 506 0x65646e49, 0x56530078, 0x736e495f, 0x636e6174, 0x00444965, 0x505f5653, 0x696d6972, 0x65766974, 507 0x53004449, 0x73495f56, 0x6e6f7246, 0x63614674, 0x45540065, 0x4f4f4358, 0x56004452, 0x45434146, 508 0x4c4f4300, 0x5300524f, 0x6f705f56, 0x69746973, 0xab006e6f, 0x4e47534f, 0x00000088, 0x00000004, 509 0x00000008, 0x00000068, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000e01, 0x00000068, 510 0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000e01, 0x00000072, 0x00000000, 0x00000000, 511 0x00000001, 0xffffffff, 0x00000e01, 0x0000007e, 0x00000000, 0x00000000, 0x00000003, 0xffffffff, 512 0x00000e01, 0x545f5653, 0x65677261, 0x56530074, 0x766f435f, 0x67617265, 0x56530065, 0x7065445f, 513 0xab006874, 0x52444853, 0x00000568, 0x00000041, 0x0000015a, 0x0100086a, 0x0300005a, 0x00106000, 514 0x00000000, 0x0300085a, 0x00106000, 0x00000001, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 515 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 516 0x00102012, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000065, 0x0000f000, 0x02000065, 517 0x0000c001, 0x02000068, 0x00000003, 0x09000045, 0x001000f2, 0x00000000, 0x00101046, 0x00000001, 518 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0b000046, 0x00100012, 0x00000001, 0x00101046, 519 0x00000001, 0x00107006, 0x00000000, 0x00106000, 0x00000001, 0x00004001, 0x3e99999a, 0x07000000, 520 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100006, 0x00000001, 0x07000031, 0x00100012, 521 0x00000001, 0x0010001a, 0x00000000, 0x00004001, 0x3dcccccd, 0x0304001f, 0x0010000a, 0x00000001, 522 0x0b000046, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107006, 0x00000001, 0x00106000, 523 0x00000001, 0x00004001, 0x3ecccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 524 0x00100006, 0x00000001, 0x01000012, 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000, 525 0x00004001, 0x3e4ccccd, 0x0304001f, 0x0010000a, 0x00000002, 0x0b000046, 0x00100012, 0x00000002, 526 0x00101046, 0x00000001, 0x00107006, 0x00000001, 0x00106000, 0x00000001, 0x00004001, 0x3dcccccd, 527 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100006, 0x00000002, 0x01000012, 528 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000, 0x00004001, 0x3e99999a, 0x0304001f, 529 0x0010000a, 0x00000002, 0x0b00004a, 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46, 530 0x00000001, 0x00106000, 0x00000000, 0x00004001, 0x3dcccccd, 0x07000000, 0x001000f2, 0x00000001, 531 0x00100e46, 0x00000000, 0x00100e46, 0x00000002, 0x01000012, 0x07000031, 0x00100012, 0x00000002, 532 0x0010001a, 0x00000000, 0x00004001, 0x3ecccccd, 0x0304001f, 0x0010000a, 0x00000002, 0x0b00004a, 533 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 534 0x00004001, 0x3e4ccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46, 535 0x00000002, 0x01000012, 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000, 0x00004001, 536 0x3f000000, 0x0304001f, 0x0010000a, 0x00000002, 0x0b00004a, 0x001000f2, 0x00000002, 0x00101046, 537 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00004001, 0x3e99999a, 0x07000000, 538 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46, 0x00000002, 0x01000012, 0x0b00004a, 539 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 540 0x00004001, 0x3ecccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46, 541 0x00000002, 0x01000015, 0x01000015, 0x01000015, 0x01000015, 0x01000015, 0x0d000049, 0x001000f2, 542 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00100046, 543 0x00000001, 0x00100046, 0x00000001, 0x07000000, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 544 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 545 0x00000001, 0x00106000, 0x00000000, 0x00100086, 0x00000000, 0x00100086, 0x00000000, 0x07000000, 546 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2, 547 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00100086, 548 0x00000000, 0x00100a66, 0x00000000, 0x07000000, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 549 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 550 0x00000001, 0x00106000, 0x00000000, 0x00100086, 0x00000000, 0x00100ae6, 0x00000000, 0x07000000, 551 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100e46, 0x00000001, 0x0d000049, 0x001000c2, 552 0x00000000, 0x00101046, 0x00000001, 0x001074e6, 0x00000001, 0x00106000, 0x00000000, 0x00100086, 553 0x00000000, 0x00100fb6, 0x00000000, 0x07000000, 0x00100032, 0x00000000, 0x00100ae6, 0x00000000, 554 0x00100046, 0x00000000, 0x05000036, 0x00102012, 0x00000001, 0x0010001a, 0x00000000, 0x04000036, 555 0x0000c001, 0x0010000a, 0x00000000, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 556 0x04000036, 0x0000f001, 0x00004001, 0xffffffff, 0x0100003e, 0x54415453, 0x00000074, 0x00000032, 557 0x00000003, 0x00000000, 0x00000005, 0x00000011, 0x00000000, 0x00000000, 0x00000006, 0x00000005, 558 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 559 0x00000004, 0x00000005, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 560 0x00000000, 0x00000000, 0x00000000, 0x00000000, 561 }; 562 563 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_resultin[] = 564 { 565 {"SV_RenderTargetArrayIndex", 0, 0, D3D_NAME_RENDER_TARGET_ARRAY_INDEX, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0x0, 0}, 566 {"SV_InstanceID", 0, 0, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_UINT32, 0x2, 0x0, 0}, 567 {"SV_PrimitiveID", 0, 0, D3D_NAME_PRIMITIVE_ID, D3D_REGISTER_COMPONENT_UINT32, 0x4, 0x0, 0}, 568 {"SV_IsFrontFace", 0, 0, D3D_NAME_IS_FRONT_FACE, D3D_REGISTER_COMPONENT_UINT32, 0x8, 0x0, 0}, 569 {"TEXCOORD", 0, 1, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x3, 0x3, 0}, 570 {"VFACE", 0, 1, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0x4, 0x0, 0}, 571 {"COLOR", 3, 2, D3D_NAME_UNDEFINED, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 572 {"SV_position", 0, 3, D3D_NAME_POSITION, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0x0, 0}, 573 }; 574 575 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_resultout[] = 576 { 577 {"SV_Target", 0, 0, D3D_NAME_TARGET, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 578 {"SV_Target", 1, 1, D3D_NAME_TARGET, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 579 {"SV_Coverage", 0, 0xffffffff, D3D_NAME_COVERAGE, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0xe, 0}, 580 {"SV_Depth", 0, 0xffffffff, D3D_NAME_DEPTH, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 581 }; 582 583 static void test_reflection_desc_ps(void) 584 { 585 HRESULT hr; 586 ULONG count; 587 ID3D11ShaderReflection *ref11; 588 D3D11_SHADER_DESC sdesc11 = {0}; 589 D3D11_SIGNATURE_PARAMETER_DESC desc = {0}; 590 const D3D11_SIGNATURE_PARAMETER_DESC *pdesc; 591 UINT ret; 592 unsigned int i; 593 594 hr = pD3DReflect(test_reflection_desc_ps_blob, test_reflection_desc_ps_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 595 ok(hr == S_OK, "D3DReflect failed %x\n", hr); 596 597 hr = ref11->lpVtbl->GetDesc(ref11, &sdesc11); 598 ok(hr == S_OK, "GetDesc failed %x\n", hr); 599 600 ok(sdesc11.Version == 65, "GetDesc failed, got %u, expected %u\n", sdesc11.Version, 65); 601 ok(strcmp(sdesc11.Creator, (char*) shader_creator) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc11.Creator, (char*)shader_creator); 602 ok(sdesc11.Flags == 256, "GetDesc failed, got %u, expected %u\n", sdesc11.Flags, 256); 603 ok(sdesc11.ConstantBuffers == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.ConstantBuffers, 0); 604 ok(sdesc11.BoundResources == 4, "GetDesc failed, got %u, expected %u\n", sdesc11.BoundResources, 4); 605 ok(sdesc11.InputParameters == 8, "GetDesc failed, got %u, expected %u\n", sdesc11.InputParameters, 8); 606 ok(sdesc11.OutputParameters == 4, "GetDesc failed, got %u, expected %u\n", sdesc11.OutputParameters, 4); 607 ok(sdesc11.InstructionCount == 50, "GetDesc failed, got %u, expected %u\n", sdesc11.InstructionCount, 50); 608 ok(sdesc11.TempRegisterCount == 3, "GetDesc failed, got %u, expected %u\n", sdesc11.TempRegisterCount, 3); 609 ok(sdesc11.TempArrayCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TempArrayCount, 0); 610 ok(sdesc11.DefCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.DefCount, 0); 611 ok(sdesc11.DclCount == 5, "GetDesc failed, got %u, expected %u\n", sdesc11.DclCount, 5); 612 ok(sdesc11.TextureNormalInstructions == 1, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureNormalInstructions, 1); 613 ok(sdesc11.TextureLoadInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureLoadInstructions, 0); 614 ok(sdesc11.TextureCompInstructions == 3, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureCompInstructions, 3); 615 ok(sdesc11.TextureBiasInstructions == 4, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureBiasInstructions, 4); 616 ok(sdesc11.TextureGradientInstructions == 5, "GetDesc failed, got %u, expected %u\n", sdesc11.TextureGradientInstructions, 5); 617 ok(sdesc11.FloatInstructionCount == 17, "GetDesc failed, got %u, expected %u\n", sdesc11.FloatInstructionCount, 17); 618 ok(sdesc11.IntInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.IntInstructionCount, 0); 619 ok(sdesc11.UintInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.UintInstructionCount, 0); 620 ok(sdesc11.StaticFlowControlCount == 6, "GetDesc failed, got %u, expected %u\n", sdesc11.StaticFlowControlCount, 6); 621 ok(sdesc11.DynamicFlowControlCount == 5, "GetDesc failed, got %u, expected %u\n", sdesc11.DynamicFlowControlCount, 5); 622 ok(sdesc11.MacroInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.MacroInstructionCount, 0); 623 ok(sdesc11.ArrayInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.ArrayInstructionCount, 0); 624 ok(sdesc11.CutInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.CutInstructionCount, 0); 625 ok(sdesc11.EmitInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.EmitInstructionCount, 0); 626 ok(sdesc11.GSOutputTopology == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.GSOutputTopology, 0); 627 ok(sdesc11.GSMaxOutputVertexCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.GSMaxOutputVertexCount, 0); 628 ok(sdesc11.InputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.InputPrimitive, 0); 629 ok(sdesc11.PatchConstantParameters == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.PatchConstantParameters, 0); 630 ok(sdesc11.cGSInstanceCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cGSInstanceCount, 0); 631 ok(sdesc11.cControlPoints == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cControlPoints, 0); 632 ok(sdesc11.HSOutputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.HSOutputPrimitive, 0); 633 ok(sdesc11.HSPartitioning == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.HSPartitioning, 0); 634 ok(sdesc11.TessellatorDomain == 0, "GetDesc failed, got %x, expected %x\n", sdesc11.TessellatorDomain, 0); 635 ok(sdesc11.cBarrierInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cBarrierInstructions, 0); 636 ok(sdesc11.cInterlockedInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cInterlockedInstructions, 0); 637 ok(sdesc11.cTextureStoreInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc11.cTextureStoreInstructions, 0); 638 639 ret = ref11->lpVtbl->GetBitwiseInstructionCount(ref11); 640 ok(ret == 0, "GetBitwiseInstructionCount failed, got %u, expected %u\n", ret, 0); 641 642 ret = ref11->lpVtbl->GetConversionInstructionCount(ref11); 643 ok(ret == 0, "GetConversionInstructionCount failed, got %u, expected %u\n", ret, 0); 644 645 ret = ref11->lpVtbl->GetMovInstructionCount(ref11); 646 ok(ret == 24, "GetMovInstructionCount failed, got %u, expected %u\n", ret, 24); 647 648 ret = ref11->lpVtbl->GetMovcInstructionCount(ref11); 649 ok(ret == 0, "GetMovcInstructionCount failed, got %u, expected %u\n", ret, 0); 650 651 /* check invalid Get*ParameterDesc cases*/ 652 hr = ref11->lpVtbl->GetInputParameterDesc(ref11, 0, NULL); 653 ok(hr == E_INVALIDARG, "GetInputParameterDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 654 655 hr = ref11->lpVtbl->GetInputParameterDesc(ref11, 0xffffffff, &desc); 656 ok(hr == E_INVALIDARG, "GetInputParameterDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 657 658 hr = ref11->lpVtbl->GetOutputParameterDesc(ref11, 0, NULL); 659 ok(hr == E_INVALIDARG, "GetOutputParameterDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 660 661 hr = ref11->lpVtbl->GetOutputParameterDesc(ref11, 0xffffffff, &desc); 662 ok(hr == E_INVALIDARG, "GetOutputParameterDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 663 664 hr = ref11->lpVtbl->GetPatchConstantParameterDesc(ref11, 0, &desc); 665 ok(hr == E_INVALIDARG, "GetPatchConstantParameterDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 666 667 /* GetIn/OutputParameterDesc */ 668 for (i = 0; i < ARRAY_SIZE(test_reflection_desc_ps_resultin); ++i) 669 { 670 pdesc = &test_reflection_desc_ps_resultin[i]; 671 672 hr = ref11->lpVtbl->GetInputParameterDesc(ref11, i, &desc); 673 ok(hr == S_OK, "GetInputParameterDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 674 675 ok(!strcmp(desc.SemanticName, pdesc->SemanticName), "GetInputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n", 676 i, desc.SemanticName, pdesc->SemanticName); 677 ok(desc.SemanticIndex == pdesc->SemanticIndex, "GetInputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n", 678 i, desc.SemanticIndex, pdesc->SemanticIndex); 679 ok(desc.Register == pdesc->Register, "GetInputParameterDesc(%u) Register failed, got %u, expected %u\n", 680 i, desc.Register, pdesc->Register); 681 ok(desc.SystemValueType == pdesc->SystemValueType, "GetInputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n", 682 i, desc.SystemValueType, pdesc->SystemValueType); 683 ok(desc.ComponentType == pdesc->ComponentType, "GetInputParameterDesc(%u) ComponentType failed, got %x, expected %x\n", 684 i, desc.ComponentType, pdesc->ComponentType); 685 ok(desc.Mask == pdesc->Mask, "GetInputParameterDesc(%u) Mask failed, got %x, expected %x\n", 686 i, desc.Mask, pdesc->Mask); 687 ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "GetInputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n", 688 i, desc.ReadWriteMask, pdesc->ReadWriteMask); 689 ok(desc.Stream == pdesc->Stream, "GetInputParameterDesc(%u) Stream failed, got %u, expected %u\n", 690 i, desc.Stream, pdesc->ReadWriteMask); 691 } 692 693 for (i = 0; i < ARRAY_SIZE(test_reflection_desc_ps_resultout); ++i) 694 { 695 pdesc = &test_reflection_desc_ps_resultout[i]; 696 697 hr = ref11->lpVtbl->GetOutputParameterDesc(ref11, i, &desc); 698 ok(hr == S_OK, "GetOutputParameterDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 699 700 ok(!strcmp(desc.SemanticName, pdesc->SemanticName), "GetOutputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n", 701 i, desc.SemanticName, pdesc->SemanticName); 702 ok(desc.SemanticIndex == pdesc->SemanticIndex, "GetOutputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n", 703 i, desc.SemanticIndex, pdesc->SemanticIndex); 704 ok(desc.Register == pdesc->Register, "GetOutputParameterDesc(%u) Register failed, got %u, expected %u\n", 705 i, desc.Register, pdesc->Register); 706 ok(desc.SystemValueType == pdesc->SystemValueType, "GetOutputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n", 707 i, desc.SystemValueType, pdesc->SystemValueType); 708 ok(desc.ComponentType == pdesc->ComponentType, "GetOutputParameterDesc(%u) ComponentType failed, got %x, expected %x\n", 709 i, desc.ComponentType, pdesc->ComponentType); 710 ok(desc.Mask == pdesc->Mask, "GetOutputParameterDesc(%u) Mask failed, got %x, expected %x\n", 711 i, desc.Mask, pdesc->Mask); 712 ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "GetOutputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n", 713 i, desc.ReadWriteMask, pdesc->ReadWriteMask); 714 ok(desc.Stream == pdesc->Stream, "GetOutputParameterDesc(%u) Stream failed, got %u, expected %u\n", 715 i, desc.Stream, pdesc->ReadWriteMask); 716 } 717 718 count = ref11->lpVtbl->Release(ref11); 719 ok(count == 0, "Release failed %u\n", count); 720 } 721 722 /* 723 * fxc.exe /E PS /Tps_5_0 /Fx 724 */ 725 #if 0 726 float4 PS() : SV_Target3 727 { 728 float4 a = float4(1.2f, 1.0f, 0.2f, 0.0f); 729 return a; 730 } 731 #endif 732 static const DWORD test_reflection_desc_ps_output_blob_0[] = { 733 0x43425844, 0x3e7b77e6, 0xe4e920b7, 0x9cad0533, 0x240117cc, 0x00000001, 0x0000018c, 0x00000005, 734 0x00000034, 0x0000008c, 0x0000009c, 0x000000d0, 0x00000110, 0x46454452, 0x00000050, 0x00000000, 735 0x00000000, 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f, 736 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 737 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 738 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000003, 0x00000000, 0x00000003, 0x00000003, 739 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000038, 0x00000040, 0x0000000e, 740 0x03000065, 0x001020f2, 0x00000003, 0x08000036, 0x001020f2, 0x00000003, 0x00004002, 0x3f99999a, 741 0x3f800000, 0x3e4ccccd, 0x00000000, 0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000, 742 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 743 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 744 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 745 0x00000000, 0x00000000, 0x00000000 746 }; 747 748 /* 749 * fxc.exe /E PS /Tps_5_0 /Fx 750 */ 751 #if 0 752 float PS() : SV_DepthLessEqual 753 { 754 float a = 1.2f; 755 return a; 756 } 757 #endif 758 static const DWORD test_reflection_desc_ps_output_blob_1[] = { 759 0x43425844, 0xd8ead3ec, 0x61276ada, 0x70cdaa9e, 0x2cfd7f4c, 0x00000001, 0x000001c4, 0x00000005, 760 0x00000034, 0x000000ac, 0x000000bc, 0x000000f8, 0x00000128, 0x46454452, 0x00000070, 0x00000000, 761 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c, 762 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f, 763 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 764 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 765 0x00000034, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff, 766 0x00000e01, 0x445f5653, 0x68747065, 0x7373654c, 0x61757145, 0xabab006c, 0x58454853, 0x00000028, 767 0x00000050, 0x0000000a, 0x0100086a, 0x02000065, 0x00027001, 0x04000036, 0x00027001, 0x00004001, 768 0x3f99999a, 0x0100003e, 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 769 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 770 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 771 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 772 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 773 0x00000000, 774 }; 775 776 /* 777 * fxc.exe /E PS /Tps_5_0 /Fx 778 */ 779 #if 0 780 float PS() : SV_DepthGreaterEqual 781 { 782 float a = 1.2f; 783 return a; 784 } 785 #endif 786 static const DWORD test_reflection_desc_ps_output_blob_2[] = { 787 0x43425844, 0x9f61c8df, 0x612cbb1f, 0x9e1d039e, 0xf925a074, 0x00000001, 0x000001c8, 0x00000005, 788 0x00000034, 0x000000ac, 0x000000bc, 0x000000fc, 0x0000012c, 0x46454452, 0x00000070, 0x00000000, 789 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c, 790 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f, 791 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 792 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 793 0x00000038, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff, 794 0x00000e01, 0x445f5653, 0x68747065, 0x61657247, 0x45726574, 0x6c617571, 0xababab00, 0x58454853, 795 0x00000028, 0x00000050, 0x0000000a, 0x0100086a, 0x02000065, 0x00026001, 0x04000036, 0x00026001, 796 0x00004001, 0x3f99999a, 0x0100003e, 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 797 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 798 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 799 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 800 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 801 0x00000000, 0x00000000, 802 }; 803 804 /* 805 * fxc.exe /E PS /Tps_5_0 /Fx 806 */ 807 #if 0 808 float PS() : sV_DePtH 809 { 810 float a = 1.2f; 811 return a; 812 } 813 #endif 814 static const DWORD test_reflection_desc_ps_output_blob_3[] = { 815 0x43425844, 0x32cec0e6, 0x3873ed32, 0x2e86ffd0, 0x21bb00e8, 0x00000001, 0x000001bc, 0x00000005, 816 0x00000034, 0x000000ac, 0x000000bc, 0x000000f0, 0x00000120, 0x46454452, 0x00000070, 0x00000000, 817 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c, 818 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f, 819 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 820 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 821 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff, 822 0x00000e01, 0x445f5673, 0x48745065, 0xababab00, 0x58454853, 0x00000028, 0x00000050, 0x0000000a, 823 0x0100086a, 0x02000065, 0x0000c001, 0x04000036, 0x0000c001, 0x00004001, 0x3f99999a, 0x0100003e, 824 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 825 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 826 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 827 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 828 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 829 }; 830 831 /* 832 * fxc.exe /E PS /Tps_4_0 /Fx 833 */ 834 #if 0 835 float PS() : SV_Depth 836 { 837 float a = 1.2f; 838 return a; 839 } 840 #endif 841 static const DWORD test_reflection_desc_ps_output_blob_4[] = { 842 0x43425844, 0x7af34874, 0x975f09ad, 0xf6e50764, 0xdfb1255f, 0x00000001, 0x00000178, 0x00000005, 843 0x00000034, 0x0000008c, 0x0000009c, 0x000000d0, 0x000000fc, 0x46454452, 0x00000050, 0x00000000, 844 0x00000000, 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f, 845 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 846 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 847 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff, 848 0x00000e01, 0x445f5653, 0x68747065, 0xababab00, 0x52444853, 0x00000024, 0x00000040, 0x00000009, 849 0x02000065, 0x0000c001, 0x04000036, 0x0000c001, 0x00004001, 0x3f99999a, 0x0100003e, 0x54415453, 850 0x00000074, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 851 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 852 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 853 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 854 }; 855 856 /* 857 * fxc.exe /E PS /Tps_4_0 /Fx 858 */ 859 #if 0 860 bool PS() : SV_COVERAGE 861 { 862 bool a = true; 863 return a; 864 } 865 #endif 866 static const DWORD test_reflection_desc_ps_output_blob_5[] = { 867 0x43425844, 0x40ae32a7, 0xe944bb1c, 0x1a2b1923, 0xea25962d, 0x00000001, 0x000001bc, 0x00000005, 868 0x00000034, 0x000000ac, 0x000000bc, 0x000000f0, 0x00000120, 0x46454452, 0x00000070, 0x00000000, 869 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c, 870 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f, 871 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e, 872 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 873 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000001, 0xffffffff, 874 0x00000e01, 0x435f5653, 0x5245564f, 0x00454741, 0x58454853, 0x00000028, 0x00000050, 0x0000000a, 875 0x0100086a, 0x02000065, 0x0000f000, 0x04000036, 0x0000f001, 0x00004001, 0xffffffff, 0x0100003e, 876 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 877 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 878 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 879 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 880 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 881 }; 882 883 static const DWORD *test_reflection_desc_ps_output_blob[] = { 884 test_reflection_desc_ps_output_blob_0, 885 test_reflection_desc_ps_output_blob_1, 886 test_reflection_desc_ps_output_blob_2, 887 test_reflection_desc_ps_output_blob_3, 888 test_reflection_desc_ps_output_blob_4, 889 test_reflection_desc_ps_output_blob_5, 890 }; 891 892 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_output_result[] = 893 { 894 {"SV_Target", 3, 3, D3D_NAME_TARGET, D3D_REGISTER_COMPONENT_FLOAT32, 0xf, 0, 0}, 895 {"SV_DepthLessEqual", 0, 0xffffffff, D3D_NAME_DEPTH_LESS_EQUAL, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 896 {"SV_DepthGreaterEqual", 0, 0xffffffff, D3D11_NAME_DEPTH_GREATER_EQUAL, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 897 {"sV_DePtH", 0, 0xffffffff, D3D_NAME_DEPTH, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 898 {"SV_Depth", 0, 0xffffffff, D3D_NAME_DEPTH, D3D_REGISTER_COMPONENT_FLOAT32, 0x1, 0xe, 0}, 899 {"SV_COVERAGE", 0, 0xffffffff, D3D_NAME_COVERAGE, D3D_REGISTER_COMPONENT_UINT32, 0x1, 0xe, 0}, 900 }; 901 902 static void test_reflection_desc_ps_output(void) 903 { 904 HRESULT hr; 905 ULONG count; 906 ID3D11ShaderReflection *ref11; 907 D3D11_SIGNATURE_PARAMETER_DESC desc = {0}; 908 const D3D11_SIGNATURE_PARAMETER_DESC *pdesc; 909 unsigned int i; 910 911 for (i = 0; i < ARRAY_SIZE(test_reflection_desc_ps_output_result); ++i) 912 { 913 hr = pD3DReflect(test_reflection_desc_ps_output_blob[i], test_reflection_desc_ps_output_blob[i][6], &IID_ID3D11ShaderReflection, (void **)&ref11); 914 ok(hr == S_OK, "(%u): D3DReflect failed %x\n", i, hr); 915 916 pdesc = &test_reflection_desc_ps_output_result[i]; 917 918 hr = ref11->lpVtbl->GetOutputParameterDesc(ref11, 0, &desc); 919 ok(hr == S_OK, "(%u): GetOutputParameterDesc failed, got %x, expected %x\n", i, hr, S_OK); 920 921 ok(!strcmp(desc.SemanticName, pdesc->SemanticName), "(%u): GetOutputParameterDesc SemanticName failed, got \"%s\", expected \"%s\"\n", 922 i, desc.SemanticName, pdesc->SemanticName); 923 ok(desc.SemanticIndex == pdesc->SemanticIndex, "(%u): GetOutputParameterDesc SemanticIndex failed, got %u, expected %u\n", 924 i, desc.SemanticIndex, pdesc->SemanticIndex); 925 ok(desc.Register == pdesc->Register, "(%u): GetOutputParameterDesc Register failed, got %u, expected %u\n", 926 i, desc.Register, pdesc->Register); 927 ok(desc.SystemValueType == pdesc->SystemValueType, "(%u): GetOutputParameterDesc SystemValueType failed, got %x, expected %x\n", 928 i, desc.SystemValueType, pdesc->SystemValueType); 929 ok(desc.ComponentType == pdesc->ComponentType, "(%u): GetOutputParameterDesc ComponentType failed, got %x, expected %x\n", 930 i, desc.ComponentType, pdesc->ComponentType); 931 ok(desc.Mask == pdesc->Mask, "(%u): GetOutputParameterDesc Mask failed, got %x, expected %x\n", 932 i, desc.Mask, pdesc->Mask); 933 ok(desc.ReadWriteMask == pdesc->ReadWriteMask, "(%u): GetOutputParameterDesc ReadWriteMask failed, got %x, expected %x\n", 934 i, desc.ReadWriteMask, pdesc->ReadWriteMask); 935 ok(desc.Stream == pdesc->Stream, "(%u): GetOutputParameterDesc Stream failed, got %u, expected %u\n", 936 i, desc.Stream, pdesc->ReadWriteMask); 937 938 count = ref11->lpVtbl->Release(ref11); 939 ok(count == 0, "(%u): Release failed %u\n", i, count); 940 } 941 } 942 943 /* 944 * fxc.exe /E PS /Tps_4_0 /Fx 945 */ 946 #if 0 947 Texture2D tex1; 948 SamplerState sam 949 { 950 Filter = MIN_MAG_MIP_LINEAR; 951 AddressU = Wrap; 952 AddressV = Wrap; 953 }; 954 cbuffer c1 955 { 956 float x; 957 float y[2]; 958 int z; 959 }; 960 cbuffer c2 961 { 962 float t; 963 }; 964 965 float4 PS(float2 uv : TEXCOORD0) : sv_target 966 { 967 float4 q = tex1.Sample(sam, uv); 968 q.x = q.x + x; 969 q.w = q.w + y[0] + y[1] + t; 970 return q; 971 } 972 #endif 973 static DWORD test_reflection_bound_resources_blob[] = { 974 0x43425844, 0xe4af0279, 0x690268fc, 0x76bf6a72, 0xe5aff43b, 0x00000001, 0x000003f4, 0x00000005, 975 0x00000034, 0x000001e8, 0x0000021c, 0x00000250, 0x00000378, 0x46454452, 0x000001ac, 0x00000002, 976 0x000000ac, 0x00000004, 0x0000001c, 0xffff0400, 0x00000100, 0x0000017a, 0x0000009c, 0x00000003, 977 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a0, 0x00000002, 978 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000c, 0x000000a5, 0x00000000, 979 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a8, 0x00000000, 980 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x006d6173, 0x31786574, 981 0x00316300, 0xab003263, 0x000000a5, 0x00000003, 0x000000dc, 0x00000030, 0x00000000, 0x00000000, 982 0x000000a8, 0x00000001, 0x00000160, 0x00000010, 0x00000000, 0x00000000, 0x00000124, 0x00000000, 983 0x00000004, 0x00000002, 0x00000128, 0x00000000, 0x00000138, 0x00000010, 0x00000014, 0x00000002, 984 0x0000013c, 0x00000000, 0x0000014c, 0x00000024, 0x00000004, 0x00000000, 0x00000150, 0x00000000, 985 0xabab0078, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0xabab0079, 0x00030000, 0x00010001, 986 0x00000002, 0x00000000, 0xabab007a, 0x00020000, 0x00010001, 0x00000000, 0x00000000, 0x00000178, 987 0x00000000, 0x00000004, 0x00000002, 0x00000128, 0x00000000, 0x694d0074, 0x736f7263, 0x2074666f, 988 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43, 0x72656c69, 0x322e3920, 0x35392e39, 989 0x31332e32, 0xab003131, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 990 0x00000000, 0x00000003, 0x00000000, 0x00000303, 0x43584554, 0x44524f4f, 0xababab00, 0x4e47534f, 991 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 992 0x0000000f, 0x745f7673, 0x65677261, 0xabab0074, 0x52444853, 0x00000120, 0x00000040, 0x00000048, 993 0x04000059, 0x00208e46, 0x00000000, 0x00000003, 0x04000059, 0x00208e46, 0x00000001, 0x00000001, 994 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 995 0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045, 996 0x001000f2, 0x00000000, 0x00101046, 0x00000000, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 997 0x08000000, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000000, 0x00000001, 998 0x08000000, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000000, 0x00000002, 999 0x08000000, 0x00102082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000001, 0x00000000, 1000 0x08000000, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 1001 0x05000036, 0x00102062, 0x00000000, 0x00100656, 0x00000000, 0x0100003e, 0x54415453, 0x00000074, 1002 0x00000007, 0x00000001, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000001, 1003 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 1004 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1005 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1006 }; 1007 1008 static const D3D11_SHADER_INPUT_BIND_DESC test_reflection_bound_resources_result[] = 1009 { 1010 {"sam", D3D_SIT_SAMPLER, 0, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN, 0}, 1011 {"tex1", D3D_SIT_TEXTURE, 0, 1, 12, D3D_RETURN_TYPE_FLOAT, D3D_SRV_DIMENSION_TEXTURE2D, 0xffffffff}, 1012 {"c1", D3D_SIT_CBUFFER, 0, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN, 0}, 1013 {"c2", D3D_SIT_CBUFFER, 1, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN, 0}, 1014 }; 1015 1016 static void test_reflection_bound_resources(void) 1017 { 1018 HRESULT hr; 1019 ULONG count; 1020 ID3D11ShaderReflection *ref11; 1021 D3D11_SHADER_INPUT_BIND_DESC desc; 1022 const D3D11_SHADER_INPUT_BIND_DESC *pdesc; 1023 unsigned int i; 1024 1025 hr = pD3DReflect(test_reflection_bound_resources_blob, test_reflection_bound_resources_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 1026 ok(hr == S_OK, "D3DReflect failed %x\n", hr); 1027 1028 /* check invalid cases */ 1029 hr = ref11->lpVtbl->GetResourceBindingDesc(ref11, 0, NULL); 1030 ok(hr == E_INVALIDARG, "GetResourceBindingDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 1031 1032 hr = ref11->lpVtbl->GetResourceBindingDesc(ref11, 0xffffffff, &desc); 1033 ok(hr == E_INVALIDARG, "GetResourceBindingDesc failed, got %x, expected %x\n", hr, E_INVALIDARG); 1034 1035 hr = ref11->lpVtbl->GetResourceBindingDescByName(ref11, NULL, &desc); 1036 ok(hr == E_INVALIDARG, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr, E_INVALIDARG); 1037 1038 hr = ref11->lpVtbl->GetResourceBindingDescByName(ref11, "sam", NULL); 1039 ok(hr == E_INVALIDARG, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr, E_INVALIDARG); 1040 1041 hr = ref11->lpVtbl->GetResourceBindingDescByName(ref11, "invalid", NULL); 1042 ok(hr == E_INVALIDARG, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr, E_INVALIDARG); 1043 1044 hr = ref11->lpVtbl->GetResourceBindingDescByName(ref11, "invalid", &desc); 1045 ok(hr == E_INVALIDARG, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr, E_INVALIDARG); 1046 1047 /* GetResourceBindingDesc */ 1048 for (i = 0; i < ARRAY_SIZE(test_reflection_bound_resources_result); ++i) 1049 { 1050 pdesc = &test_reflection_bound_resources_result[i]; 1051 1052 hr = ref11->lpVtbl->GetResourceBindingDesc(ref11, i, &desc); 1053 ok(hr == S_OK, "GetResourceBindingDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 1054 1055 ok(!strcmp(desc.Name, pdesc->Name), "GetResourceBindingDesc(%u) Name failed, got \"%s\", expected \"%s\"\n", 1056 i, desc.Name, pdesc->Name); 1057 ok(desc.Type == pdesc->Type, "GetResourceBindingDesc(%u) Type failed, got %x, expected %x\n", 1058 i, desc.Type, pdesc->Type); 1059 ok(desc.BindPoint == pdesc->BindPoint, "GetResourceBindingDesc(%u) BindPoint failed, got %u, expected %u\n", 1060 i, desc.BindPoint, pdesc->BindPoint); 1061 ok(desc.BindCount == pdesc->BindCount, "GetResourceBindingDesc(%u) BindCount failed, got %u, expected %u\n", 1062 i, desc.BindCount, pdesc->BindCount); 1063 ok(desc.uFlags == pdesc->uFlags, "GetResourceBindingDesc(%u) uFlags failed, got %u, expected %u\n", 1064 i, desc.uFlags, pdesc->uFlags); 1065 ok(desc.ReturnType == pdesc->ReturnType, "GetResourceBindingDesc(%u) ReturnType failed, got %x, expected %x\n", 1066 i, desc.ReturnType, pdesc->ReturnType); 1067 ok(desc.Dimension == pdesc->Dimension, "GetResourceBindingDesc(%u) Dimension failed, got %x, expected %x\n", 1068 i, desc.Dimension, pdesc->Dimension); 1069 ok(desc.NumSamples == pdesc->NumSamples, "GetResourceBindingDesc(%u) NumSamples failed, got %u, expected %u\n", 1070 i, desc.NumSamples, pdesc->NumSamples); 1071 } 1072 1073 /* GetResourceBindingDescByName */ 1074 for (i = 0; i < ARRAY_SIZE(test_reflection_bound_resources_result); ++i) 1075 { 1076 pdesc = &test_reflection_bound_resources_result[i]; 1077 1078 hr = ref11->lpVtbl->GetResourceBindingDescByName(ref11, pdesc->Name, &desc); 1079 ok(hr == S_OK, "GetResourceBindingDescByName(%u) failed, got %x, expected %x\n", i, hr, S_OK); 1080 1081 ok(!strcmp(desc.Name, pdesc->Name), "GetResourceBindingDescByName(%u) Name failed, got \"%s\", expected \"%s\"\n", 1082 i, desc.Name, pdesc->Name); 1083 ok(desc.Type == pdesc->Type, "GetResourceBindingDescByName(%u) Type failed, got %x, expected %x\n", 1084 i, desc.Type, pdesc->Type); 1085 ok(desc.BindPoint == pdesc->BindPoint, "GetResourceBindingDescByName(%u) BindPoint failed, got %u, expected %u\n", 1086 i, desc.BindPoint, pdesc->BindPoint); 1087 ok(desc.BindCount == pdesc->BindCount, "GetResourceBindingDescByName(%u) BindCount failed, got %u, expected %u\n", 1088 i, desc.BindCount, pdesc->BindCount); 1089 ok(desc.uFlags == pdesc->uFlags, "GetResourceBindingDescByName(%u) uFlags failed, got %u, expected %u\n", 1090 i, desc.uFlags, pdesc->uFlags); 1091 ok(desc.ReturnType == pdesc->ReturnType, "GetResourceBindingDescByName(%u) ReturnType failed, got %x, expected %x\n", 1092 i, desc.ReturnType, pdesc->ReturnType); 1093 ok(desc.Dimension == pdesc->Dimension, "GetResourceBindingDescByName(%u) Dimension failed, got %x, expected %x\n", 1094 i, desc.Dimension, pdesc->Dimension); 1095 ok(desc.NumSamples == pdesc->NumSamples, "GetResourceBindingDescByName(%u) NumSamples failed, got %u, expected %u\n", 1096 i, desc.NumSamples, pdesc->NumSamples); 1097 } 1098 1099 count = ref11->lpVtbl->Release(ref11); 1100 ok(count == 0, "Release failed %u\n", count); 1101 } 1102 1103 /* 1104 * fxc.exe /E PS /Tps_5_0 /Fx 1105 */ 1106 #if 0 1107 cbuffer c1 1108 { 1109 float a; 1110 float b[2]; 1111 int i; 1112 struct s { 1113 float a; 1114 float b; 1115 } t; 1116 }; 1117 1118 interface iTest 1119 { 1120 float4 test(float2 vec); 1121 }; 1122 1123 class cTest : iTest 1124 { 1125 bool m_on; 1126 float4 test(float2 vec); 1127 }; 1128 1129 float4 cTest::test(float2 vec) 1130 { 1131 float4 res; 1132 if(m_on) 1133 res = float4(vec.x, vec.y, vec.x+vec.y, 0); 1134 else 1135 res = 0; 1136 return res; 1137 } 1138 1139 iTest g_Test; 1140 1141 1142 float4 PS(float2 uv : TEXCOORD0) : sv_target 1143 { 1144 float4 q = g_Test.test(uv); 1145 q.x = q.x + t.a; 1146 return q; 1147 } 1148 #endif 1149 static DWORD test_reflection_constant_buffer_blob[] = { 1150 0x43425844, 0xe6470e0d, 0x0d5698bb, 0x29373c30, 0x64a5d268, 0x00000001, 0x00000590, 0x00000006, 1151 0x00000038, 0x00000318, 0x0000034c, 0x00000380, 0x000003d8, 0x000004f4, 0x46454452, 0x000002d8, 1152 0x00000002, 0x00000060, 0x00000001, 0x0000003c, 0xffff0500, 0x00000100, 0x000002a4, 0x31314452, 1153 0x0000003c, 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000001, 0x0000005c, 1154 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0xab003163, 1155 0x00000090, 0x00000001, 0x000000a0, 0x00000010, 0x00000000, 0x00000002, 0x0000005c, 0x00000004, 1156 0x00000120, 0x00000040, 0x00000000, 0x00000000, 0x69685424, 0x696f5073, 0x7265746e, 0xababab00, 1157 0x000000c8, 0x00000000, 0x00000001, 0x00000006, 0x000000fc, 0x00000000, 0xffffffff, 0x00000000, 1158 0xffffffff, 0x00000000, 0x65545f67, 0x69007473, 0x74736554, 0xababab00, 0x00000006, 0x00000001, 1159 0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000cf, 0x00250007, 1160 0x00040001, 0x00000000, 0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x000000cf, 1161 0x000001c0, 0x00000000, 0x00000004, 0x00000000, 0x000001c8, 0x00000000, 0xffffffff, 0x00000000, 1162 0xffffffff, 0x00000000, 0x000001ec, 0x00000010, 0x00000014, 0x00000000, 0x000001f0, 0x00000000, 1163 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000214, 0x00000024, 0x00000004, 0x00000000, 1164 0x0000021c, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000240, 0x00000030, 1165 0x00000008, 0x00000002, 0x00000280, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 1166 0x6c660061, 0x0074616f, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1167 0x00000000, 0x00000000, 0x000001c2, 0xabab0062, 0x00030000, 0x00010001, 0x00000002, 0x00000000, 1168 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001c2, 0x6e690069, 0xabab0074, 0x00020000, 1169 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000216, 1170 0x00730074, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1171 0x00000000, 0x000001c2, 0x000001c0, 0x00000244, 0x00000000, 0x000001ec, 0x00000244, 0x00000004, 1172 0x00000005, 0x00020001, 0x00020000, 0x00000268, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1173 0x00000242, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 1174 0x6c69706d, 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x0000002c, 1175 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000303, 1176 0x43584554, 0x44524f4f, 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 1177 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x745f7673, 0x65677261, 0xabab0074, 1178 0x45434649, 0x00000050, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000040, 0x00000034, 1179 0x00000024, 0x00000000, 0x4e47534f, 0x00000001, 0x00000001, 0x00000040, 0x00000044, 0x00000048, 1180 0x00010000, 0x00000000, 0xabab0000, 0x00000000, 0x73655463, 0xabab0074, 0x58454853, 0x00000114, 1181 0x00000050, 0x00000045, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000004, 0x03000091, 1182 0x00000000, 0x00000000, 0x05000092, 0x00000000, 0x00000000, 0x00010001, 0x00000000, 0x03001062, 1183 0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x07000000, 1184 0x00100042, 0x00000000, 0x0010101a, 0x00000000, 0x0010100a, 0x00000000, 0x05000036, 0x00100032, 1185 0x00000000, 0x00101046, 0x00000000, 0x05000036, 0x00100082, 0x00000000, 0x00004001, 0x00000000, 1186 0x05000036, 0x00100032, 0x00000001, 0x0011d516, 0x00000000, 0x0a000001, 0x001000f2, 0x00000000, 1187 0x00100e46, 0x00000000, 0x04a08006, 0x0010001a, 0x00000001, 0x0010000a, 0x00000001, 0x08000000, 1188 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000000, 0x00000003, 0x05000036, 1189 0x001020e2, 0x00000000, 0x00100e56, 0x00000000, 0x0100003e, 0x54415453, 0x00000094, 0x00000008, 1190 0x00000002, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 1191 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1192 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1193 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1194 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1195 }; 1196 1197 static const D3D11_SHADER_BUFFER_DESC test_reflection_constant_buffer_cb_result[] = 1198 { 1199 {"$ThisPointer", D3D_CT_INTERFACE_POINTERS, 1, 16, 0}, 1200 {"c1", D3D_CT_CBUFFER, 4, 64, 0}, 1201 }; 1202 1203 static const struct { 1204 D3D11_SHADER_VARIABLE_DESC desc; 1205 unsigned int type; 1206 } test_reflection_constant_buffer_variable_result[] = 1207 { 1208 {{"g_Test", 0, 1, 6, 0}, 0}, 1209 {{"a", 0, 4, 0, 0}, 1}, 1210 {{"b", 16, 20, 0, 0}, 2}, 1211 {{"i", 36, 4, 0, 0}, 3}, 1212 {{"t", 48, 8, 2, 0}, 4}, 1213 }; 1214 1215 static const D3D11_SHADER_TYPE_DESC test_reflection_constant_buffer_type_result[] = 1216 { 1217 {D3D11_SVC_INTERFACE_POINTER, D3D11_SVT_INTERFACE_POINTER, 1, 4, 0, 1, 0, "iTest"}, 1218 {D3D_SVC_SCALAR, D3D_SVT_FLOAT, 1, 1, 0, 1, 0, "float"}, 1219 {D3D_SVC_SCALAR, D3D_SVT_FLOAT, 1, 1, 2, 1, 0, "float"}, 1220 {D3D_SVC_SCALAR, D3D_SVT_INT, 1, 1, 0, 1, 0, "int"}, 1221 {D3D_SVC_STRUCT, D3D_SVT_VOID, 1, 2, 0, 1, 0, "s"}, 1222 }; 1223 1224 static void test_reflection_constant_buffer(void) 1225 { 1226 HRESULT hr; 1227 ULONG count; 1228 ID3D11ShaderReflection *ref11; 1229 ID3D11ShaderReflectionConstantBuffer *cb11, *cb11_dummy = NULL, *cb11_valid = NULL; 1230 ID3D11ShaderReflectionVariable *v11, *v11_dummy = NULL, *v11_valid = NULL; 1231 ID3D11ShaderReflectionType *t11, *t, *t2, *t11_dummy = NULL, *t11_valid = NULL; 1232 D3D11_SHADER_BUFFER_DESC cbdesc = {0}; 1233 D3D11_SHADER_VARIABLE_DESC vdesc = {0}; 1234 D3D11_SHADER_TYPE_DESC tdesc = {0}; 1235 D3D11_SHADER_DESC sdesc = {0}; 1236 const D3D11_SHADER_BUFFER_DESC *pcbdesc; 1237 const D3D11_SHADER_VARIABLE_DESC *pvdesc; 1238 const D3D11_SHADER_TYPE_DESC *ptdesc; 1239 unsigned int i; 1240 LPCSTR string; 1241 1242 hr = pD3DReflect(test_reflection_constant_buffer_blob, test_reflection_constant_buffer_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11); 1243 ok(hr == S_OK, "D3DReflect failed %x\n", hr); 1244 1245 hr = ref11->lpVtbl->GetDesc(ref11, &sdesc); 1246 ok(hr == S_OK, "GetDesc failed %x\n", hr); 1247 1248 ok(sdesc.Version == 80, "GetDesc failed, got %u, expected %u\n", sdesc.Version, 80); 1249 ok(strcmp(sdesc.Creator, (char*) shader_creator) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc.Creator, (char*)shader_creator); 1250 ok(sdesc.Flags == 256, "GetDesc failed, got %u, expected %u\n", sdesc.Flags, 256); 1251 ok(sdesc.ConstantBuffers == 2, "GetDesc failed, got %u, expected %u\n", sdesc.ConstantBuffers, 2); 1252 ok(sdesc.BoundResources == 1, "GetDesc failed, got %u, expected %u\n", sdesc.BoundResources, 1); 1253 ok(sdesc.InputParameters == 1, "GetDesc failed, got %u, expected %u\n", sdesc.InputParameters, 1); 1254 ok(sdesc.OutputParameters == 1, "GetDesc failed, got %u, expected %u\n", sdesc.OutputParameters, 1); 1255 ok(sdesc.InstructionCount == 8, "GetDesc failed, got %u, expected %u\n", sdesc.InstructionCount, 8); 1256 ok(sdesc.TempRegisterCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.TempRegisterCount, 2); 1257 ok(sdesc.TempArrayCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TempArrayCount, 0); 1258 ok(sdesc.DefCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.DefCount, 0); 1259 ok(sdesc.DclCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.DclCount, 2); 1260 ok(sdesc.TextureNormalInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureNormalInstructions, 0); 1261 ok(sdesc.TextureLoadInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureLoadInstructions, 0); 1262 ok(sdesc.TextureCompInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureCompInstructions, 0); 1263 ok(sdesc.TextureBiasInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureBiasInstructions, 0); 1264 ok(sdesc.TextureGradientInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureGradientInstructions, 0); 1265 ok(sdesc.FloatInstructionCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.FloatInstructionCount, 2); 1266 ok(sdesc.IntInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.IntInstructionCount, 0); 1267 ok(sdesc.UintInstructionCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc.UintInstructionCount, 1); 1268 ok(sdesc.StaticFlowControlCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc.StaticFlowControlCount, 1); 1269 ok(sdesc.DynamicFlowControlCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.DynamicFlowControlCount, 0); 1270 ok(sdesc.MacroInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.MacroInstructionCount, 0); 1271 ok(sdesc.ArrayInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.ArrayInstructionCount, 0); 1272 ok(sdesc.CutInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.CutInstructionCount, 0); 1273 ok(sdesc.EmitInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.EmitInstructionCount, 0); 1274 ok(sdesc.GSOutputTopology == 0, "GetDesc failed, got %x, expected %x\n", sdesc.GSOutputTopology, 0); 1275 ok(sdesc.GSMaxOutputVertexCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.GSMaxOutputVertexCount, 0); 1276 ok(sdesc.InputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc.InputPrimitive, 0); 1277 ok(sdesc.PatchConstantParameters == 0, "GetDesc failed, got %u, expected %u\n", sdesc.PatchConstantParameters, 0); 1278 ok(sdesc.cGSInstanceCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cGSInstanceCount, 0); 1279 ok(sdesc.cControlPoints == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cControlPoints, 0); 1280 ok(sdesc.HSOutputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc.HSOutputPrimitive, 0); 1281 ok(sdesc.HSPartitioning == 0, "GetDesc failed, got %x, expected %x\n", sdesc.HSPartitioning, 0); 1282 ok(sdesc.TessellatorDomain == 0, "GetDesc failed, got %x, expected %x\n", sdesc.TessellatorDomain, 0); 1283 ok(sdesc.cBarrierInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cBarrierInstructions, 0); 1284 ok(sdesc.cInterlockedInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cInterlockedInstructions, 0); 1285 ok(sdesc.cTextureStoreInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cTextureStoreInstructions, 0); 1286 1287 /* get the dummys for comparison */ 1288 cb11_dummy = ref11->lpVtbl->GetConstantBufferByIndex(ref11, 0xffffffff); 1289 ok(cb11_dummy != NULL, "GetConstantBufferByIndex failed\n"); 1290 1291 v11_dummy = cb11_dummy->lpVtbl->GetVariableByIndex(cb11_dummy, 0xffffffff); 1292 ok(v11_dummy != NULL, "GetVariableByIndex failed\n"); 1293 1294 t11_dummy = v11_dummy->lpVtbl->GetType(v11_dummy); 1295 ok(t11_dummy != NULL, "GetType failed\n"); 1296 1297 /* get the valid variables */ 1298 cb11_valid = ref11->lpVtbl->GetConstantBufferByIndex(ref11, 1); 1299 ok(cb11_valid != cb11_dummy && cb11_valid, "GetConstantBufferByIndex failed\n"); 1300 1301 v11_valid = cb11_valid->lpVtbl->GetVariableByIndex(cb11_valid, 0); 1302 ok(v11_valid != v11_dummy && v11_valid, "GetVariableByIndex failed\n"); 1303 1304 t11_valid = v11_valid->lpVtbl->GetType(v11_valid); 1305 ok(t11_valid != t11_dummy && t11_valid, "GetType failed\n"); 1306 1307 /* reflection calls */ 1308 cb11 = ref11->lpVtbl->GetConstantBufferByName(ref11, "invalid"); 1309 ok(cb11_dummy == cb11, "GetConstantBufferByName failed, got %p, expected %p\n", cb11, cb11_dummy); 1310 1311 cb11 = ref11->lpVtbl->GetConstantBufferByName(ref11, NULL); 1312 ok(cb11_dummy == cb11, "GetConstantBufferByName failed, got %p, expected %p\n", cb11, cb11_dummy); 1313 1314 v11 = ref11->lpVtbl->GetVariableByName(ref11, NULL); 1315 ok(v11_dummy == v11, "GetVariableByIndex failed, got %p, expected %p\n", v11, v11_dummy); 1316 1317 v11 = ref11->lpVtbl->GetVariableByName(ref11, "invalid"); 1318 ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy); 1319 1320 v11 = ref11->lpVtbl->GetVariableByName(ref11, "a"); 1321 ok(v11_valid == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_valid); 1322 1323 /* constant buffer calls */ 1324 v11 = cb11_dummy->lpVtbl->GetVariableByName(cb11_dummy, NULL); 1325 ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy); 1326 1327 v11 = cb11_dummy->lpVtbl->GetVariableByName(cb11_dummy, "invalid"); 1328 ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy); 1329 1330 v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, NULL); 1331 ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy); 1332 1333 v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, "invalid"); 1334 ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy); 1335 1336 v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, "a"); 1337 ok(v11_valid == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_valid); 1338 1339 hr = cb11_dummy->lpVtbl->GetDesc(cb11_dummy, NULL); 1340 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1341 1342 hr = cb11_dummy->lpVtbl->GetDesc(cb11_dummy, &cbdesc); 1343 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1344 1345 hr = cb11_valid->lpVtbl->GetDesc(cb11_valid, NULL); 1346 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1347 1348 /* variable calls */ 1349 hr = v11_dummy->lpVtbl->GetDesc(v11_dummy, NULL); 1350 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1351 1352 hr = v11_dummy->lpVtbl->GetDesc(v11_dummy, &vdesc); 1353 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1354 1355 hr = v11_valid->lpVtbl->GetDesc(v11_valid, NULL); 1356 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1357 1358 /* type calls */ 1359 hr = t11_dummy->lpVtbl->GetDesc(t11_dummy, NULL); 1360 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1361 1362 hr = t11_dummy->lpVtbl->GetDesc(t11_dummy, &tdesc); 1363 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1364 1365 hr = t11_valid->lpVtbl->GetDesc(t11_valid, NULL); 1366 ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL); 1367 1368 string = t11_dummy->lpVtbl->GetMemberTypeName(t11_dummy, 0xffffffff); 1369 ok(!strcmp(string, "$Invalid"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string, "$Invalid"); 1370 1371 string = t11_valid->lpVtbl->GetMemberTypeName(t11_valid, 0xffffffff); 1372 ok(!string, "GetMemberTypeName failed, got \"%s\", expected NULL\n", string); 1373 1374 t11 = t11_dummy->lpVtbl->GetMemberTypeByIndex(t11_dummy, 0xffffffff); 1375 ok(t11_dummy == t11, "GetMemberTypeByIndex failed, got %p, expected %p\n", t11, t11_dummy); 1376 1377 t11 = t11_valid->lpVtbl->GetMemberTypeByIndex(t11_valid, 0xffffffff); 1378 ok(t11_dummy == t11, "GetMemberTypeByIndex failed, got %p, expected %p\n", t11, t11_dummy); 1379 1380 t11 = t11_dummy->lpVtbl->GetMemberTypeByName(t11_dummy, NULL); 1381 ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy); 1382 1383 t11 = t11_dummy->lpVtbl->GetMemberTypeByName(t11_dummy, "invalid"); 1384 ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy); 1385 1386 t11 = t11_valid->lpVtbl->GetMemberTypeByName(t11_valid, NULL); 1387 ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy); 1388 1389 t11 = t11_valid->lpVtbl->GetMemberTypeByName(t11_valid, "invalid"); 1390 ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy); 1391 1392 hr = t11_dummy->lpVtbl->IsEqual(t11_dummy, t11_dummy); 1393 ok(hr == E_FAIL, "IsEqual failed, got %x, expected %x\n", hr, E_FAIL); 1394 1395 hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11_dummy); 1396 ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE); 1397 1398 hr = t11_dummy->lpVtbl->IsEqual(t11_dummy, t11_valid); 1399 ok(hr == E_FAIL, "IsEqual failed, got %x, expected %x\n", hr, E_FAIL); 1400 1401 hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11_valid); 1402 ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK); 1403 1404 /* constant buffers */ 1405 for (i = 0; i < ARRAY_SIZE(test_reflection_constant_buffer_cb_result); ++i) 1406 { 1407 pcbdesc = &test_reflection_constant_buffer_cb_result[i]; 1408 1409 cb11 = ref11->lpVtbl->GetConstantBufferByIndex(ref11, i); 1410 ok(cb11_dummy != cb11, "GetConstantBufferByIndex(%u) failed\n", i); 1411 1412 hr = cb11->lpVtbl->GetDesc(cb11, &cbdesc); 1413 ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 1414 1415 ok(!strcmp(cbdesc.Name, pcbdesc->Name), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n", 1416 i, cbdesc.Name, pcbdesc->Name); 1417 ok(cbdesc.Type == pcbdesc->Type, "GetDesc(%u) Type failed, got %x, expected %x\n", 1418 i, cbdesc.Type, pcbdesc->Type); 1419 ok(cbdesc.Variables == pcbdesc->Variables, "GetDesc(%u) Variables failed, got %u, expected %u\n", 1420 i, cbdesc.Variables, pcbdesc->Variables); 1421 ok(cbdesc.Size == pcbdesc->Size, "GetDesc(%u) Size failed, got %u, expected %u\n", 1422 i, cbdesc.Size, pcbdesc->Size); 1423 ok(cbdesc.uFlags == pcbdesc->uFlags, "GetDesc(%u) uFlags failed, got %u, expected %u\n", 1424 i, cbdesc.uFlags, pcbdesc->uFlags); 1425 } 1426 1427 /* variables */ 1428 for (i = 0; i < ARRAY_SIZE(test_reflection_constant_buffer_variable_result); ++i) 1429 { 1430 pvdesc = &test_reflection_constant_buffer_variable_result[i].desc; 1431 1432 v11 = ref11->lpVtbl->GetVariableByName(ref11, pvdesc->Name); 1433 ok(v11_dummy != v11, "GetVariableByName(%u) failed\n", i); 1434 1435 hr = v11->lpVtbl->GetDesc(v11, &vdesc); 1436 ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 1437 1438 ok(!strcmp(vdesc.Name, pvdesc->Name), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n", 1439 i, vdesc.Name, pvdesc->Name); 1440 ok(vdesc.StartOffset == pvdesc->StartOffset, "GetDesc(%u) StartOffset failed, got %u, expected %u\n", 1441 i, vdesc.StartOffset, pvdesc->StartOffset); 1442 ok(vdesc.Size == pvdesc->Size, "GetDesc(%u) Size failed, got %u, expected %u\n", 1443 i, vdesc.Size, pvdesc->Size); 1444 ok(vdesc.uFlags == pvdesc->uFlags, "GetDesc(%u) uFlags failed, got %u, expected %u\n", 1445 i, vdesc.uFlags, pvdesc->uFlags); 1446 ok(vdesc.DefaultValue == pvdesc->DefaultValue, "GetDesc(%u) DefaultValue failed\n", i); 1447 1448 /* types */ 1449 ptdesc = &test_reflection_constant_buffer_type_result[test_reflection_constant_buffer_variable_result[i].type]; 1450 1451 t11 = v11->lpVtbl->GetType(v11); 1452 ok(t11_dummy != t11, "GetType(%u) failed\n", i); 1453 1454 hr = t11->lpVtbl->GetDesc(t11, &tdesc); 1455 ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK); 1456 1457 ok(tdesc.Class == ptdesc->Class, "GetDesc(%u) Class failed, got %x, expected %x\n", 1458 i, tdesc.Class, ptdesc->Class); 1459 ok(tdesc.Type == ptdesc->Type, "GetDesc(%u) Type failed, got %x, expected %x\n", 1460 i, tdesc.Type, ptdesc->Type); 1461 ok(tdesc.Rows == ptdesc->Rows, "GetDesc(%u) Rows failed, got %x, expected %x\n", 1462 i, tdesc.Rows, ptdesc->Rows); 1463 ok(tdesc.Columns == ptdesc->Columns, "GetDesc(%u) Columns failed, got %u, expected %u\n", 1464 i, tdesc.Columns, ptdesc->Columns); 1465 ok(tdesc.Elements == ptdesc->Elements, "GetDesc(%u) Elements failed, got %u, expected %u\n", 1466 i, tdesc.Elements, ptdesc->Elements); 1467 ok(tdesc.Offset == ptdesc->Offset, "GetDesc(%u) Offset failed, got %u, expected %u\n", 1468 i, tdesc.Offset, ptdesc->Offset); 1469 ok(!strcmp(tdesc.Name, ptdesc->Name), "GetDesc(%u) Name failed, got %s, expected %s\n", 1470 i, tdesc.Name, ptdesc->Name); 1471 } 1472 1473 /* types */ 1474 v11 = ref11->lpVtbl->GetVariableByName(ref11, "t"); 1475 ok(v11_dummy != v11, "GetVariableByName failed\n"); 1476 1477 t11 = v11->lpVtbl->GetType(v11); 1478 ok(t11 != t11_dummy, "GetType failed\n"); 1479 1480 t = t11->lpVtbl->GetMemberTypeByIndex(t11, 0); 1481 ok(t != t11_dummy, "GetMemberTypeByIndex failed\n"); 1482 1483 t2 = t11->lpVtbl->GetMemberTypeByName(t11, "a"); 1484 ok(t == t2, "GetMemberTypeByName failed, got %p, expected %p\n", t2, t); 1485 1486 string = t11->lpVtbl->GetMemberTypeName(t11, 0); 1487 ok(!strcmp(string, "a"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string, "a"); 1488 1489 t = t11->lpVtbl->GetMemberTypeByIndex(t11, 1); 1490 ok(t != t11_dummy, "GetMemberTypeByIndex failed\n"); 1491 1492 t2 = t11->lpVtbl->GetMemberTypeByName(t11, "b"); 1493 ok(t == t2, "GetMemberTypeByName failed, got %p, expected %p\n", t2, t); 1494 1495 string = t11->lpVtbl->GetMemberTypeName(t11, 1); 1496 ok(!strcmp(string, "b"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string, "b"); 1497 1498 /* float vs float (in struct) */ 1499 hr = t11->lpVtbl->IsEqual(t11, t11_valid); 1500 ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE); 1501 1502 hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11); 1503 ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE); 1504 1505 /* float vs float */ 1506 t = t11->lpVtbl->GetMemberTypeByIndex(t11, 0); 1507 ok(t != t11_dummy, "GetMemberTypeByIndex failed\n"); 1508 1509 t2 = t11->lpVtbl->GetMemberTypeByIndex(t11, 1); 1510 ok(t2 != t11_dummy, "GetMemberTypeByIndex failed\n"); 1511 1512 hr = t->lpVtbl->IsEqual(t, t2); 1513 ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK); 1514 1515 count = ref11->lpVtbl->Release(ref11); 1516 ok(count == 0, "Release failed %u\n", count); 1517 } 1518 1519 static BOOL load_d3dcompiler(void) 1520 { 1521 HMODULE module; 1522 1523 if (!(module = LoadLibraryA("d3dcompiler_43.dll"))) return FALSE; 1524 1525 pD3DReflect = (void*)GetProcAddress(module, "D3DReflect"); 1526 return TRUE; 1527 } 1528 1529 START_TEST(reflection) 1530 { 1531 if (!load_d3dcompiler()) 1532 { 1533 win_skip("Could not load d3dcompiler_43.dll\n"); 1534 return; 1535 } 1536 1537 #ifndef __REACTOS__ 1538 test_reflection_references(); 1539 #endif 1540 test_reflection_desc_vs(); 1541 test_reflection_desc_ps(); 1542 test_reflection_desc_ps_output(); 1543 test_reflection_bound_resources(); 1544 test_reflection_constant_buffer(); 1545 } 1546