1 /* 2 * Copyright 2008 Luis Busquets 3 * Copyright 2011 Travis Athougies 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20 #include "wine/test.h" 21 #include "d3dx9.h" 22 23 #define FCC_TEXT MAKEFOURCC('T','E','X','T') 24 #define FCC_CTAB MAKEFOURCC('C','T','A','B') 25 26 static const DWORD shader_zero[] = {0x0}; 27 28 static const DWORD shader_invalid[] = {0xeeee0100}; 29 30 static const DWORD shader_empty[] = {0xfffe0200, 0x0000ffff}; 31 32 static const DWORD simple_fx[] = {0x46580000, 0x0002fffe, FCC_TEXT, 0x00000000, 0x0000ffff}; 33 34 static const DWORD simple_tx[] = {0x54580000, 0x0002fffe, FCC_TEXT, 0x00000000, 0x0000ffff}; 35 36 static const DWORD simple_7ffe[] = {0x7ffe0000, 0x0002fffe, FCC_TEXT, 0x00000000, 0x0000ffff}; 37 38 static const DWORD simple_7fff[] = {0x7fff0000, 0x0002fffe, FCC_TEXT, 0x00000000, 0x0000ffff}; 39 40 static const DWORD simple_vs[] = { 41 0xfffe0101, /* vs_1_1 */ 42 0x0000001f, 0x80000000, 0x900f0000, /* dcl_position0 v0 */ 43 0x00000009, 0xc0010000, 0x90e40000, 0xa0e40000, /* dp4 oPos.x, v0, c0 */ 44 0x00000009, 0xc0020000, 0x90e40000, 0xa0e40001, /* dp4 oPos.y, v0, c1 */ 45 0x00000009, 0xc0040000, 0x90e40000, 0xa0e40002, /* dp4 oPos.z, v0, c2 */ 46 0x00000009, 0xc0080000, 0x90e40000, 0xa0e40003, /* dp4 oPos.w, v0, c3 */ 47 0x0000ffff}; /* END */ 48 49 static const DWORD simple_ps[] = { 50 0xffff0101, /* ps_1_1 */ 51 0x00000051, 0xa00f0001, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, /* def c1 = 1.0, 0.0, 0.0, 0.0 */ 52 0x00000042, 0xb00f0000, /* tex t0 */ 53 0x00000008, 0x800f0000, 0xa0e40001, 0xa0e40000, /* dp3 r0, c1, c0 */ 54 0x00000005, 0x800f0000, 0x90e40000, 0x80e40000, /* mul r0, v0, r0 */ 55 0x00000005, 0x800f0000, 0xb0e40000, 0x80e40000, /* mul r0, t0, r0 */ 56 0x0000ffff}; /* END */ 57 58 static const DWORD shader_with_ctab[] = { 59 0xfffe0300, /* vs_3_0 */ 60 0x0002fffe, FCC_TEXT, 0x00000000, /* TEXT comment */ 61 0x0008fffe, FCC_CTAB, 0x0000001c, 0x00000010, 0xfffe0300, 0x00000000, /* CTAB comment */ 62 0x00000000, 0x00000000, 0x00000000, 63 0x0004fffe, FCC_TEXT, 0x00000000, 0x00000000, 0x00000000, /* TEXT comment */ 64 0x0000ffff}; /* END */ 65 66 static const DWORD shader_with_invalid_ctab[] = { 67 0xfffe0300, /* vs_3_0 */ 68 0x0005fffe, FCC_CTAB, /* CTAB comment */ 69 0x0000001c, 0x000000a9, 0xfffe0300, 70 0x00000000, 0x00000000, 71 0x0000ffff}; /* END */ 72 73 static const DWORD shader_with_ctab_constants[] = { 74 0xfffe0300, /* vs_3_0 */ 75 0x002efffe, FCC_CTAB, /* CTAB comment */ 76 0x0000001c, 0x000000a4, 0xfffe0300, 0x00000003, 0x0000001c, 0x20008100, /* Header */ 77 0x0000009c, 78 0x00000058, 0x00070002, 0x00000001, 0x00000064, 0x00000000, /* Constant 1 desc */ 79 0x00000074, 0x00000002, 0x00000004, 0x00000080, 0x00000000, /* Constant 2 desc */ 80 0x00000090, 0x00040002, 0x00000003, 0x00000080, 0x00000000, /* Constant 3 desc */ 81 0x736e6f43, 0x746e6174, 0xabab0031, /* Constant 1 name string */ 82 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* Constant 1 type desc */ 83 0x736e6f43, 0x746e6174, 0xabab0032, /* Constant 2 name string */ 84 0x00030003, 0x00040004, 0x00000001, 0x00000000, /* Constant 2 & 3 type desc */ 85 0x736e6f43, 0x746e6174, 0xabab0033, /* Constant 3 name string */ 86 0x335f7376, 0xab00305f, /* Target name string */ 87 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 88 0x0000ffff}; /* END */ 89 90 static const DWORD ctab_basic[] = { 91 0xfffe0300, /* vs_3_0 */ 92 0x0040fffe, FCC_CTAB, /* CTAB comment */ 93 0x0000001c, 0x000000ec, 0xfffe0300, 0x00000005, 0x0000001c, 0x20008100, /* Header */ 94 0x000000e4, 95 0x00000080, 0x00060002, 0x00000001, 0x00000084, 0x00000000, /* Constant 1 desc (f) */ 96 0x00000094, 0x00070002, 0x00000001, 0x00000098, 0x00000000, /* Constant 2 desc (f4) */ 97 0x000000A8, 0x00040002, 0x00000001, 0x000000AC, 0x00000000, /* Constant 3 desc (i) */ 98 0x000000BC, 0x00050002, 0x00000001, 0x000000C0, 0x00000000, /* Constant 4 desc (i4) */ 99 0x000000D0, 0x00000002, 0x00000004, 0x000000D4, 0x00000000, /* Constant 5 desc (mvp) */ 100 0xabab0066, 0x00030000, 0x00010001, 0x00000001, 0x00000000, /* Constant 1 name/type desc */ 101 0xab003466, 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* Constant 2 name/type desc */ 102 0xabab0069, 0x00020000, 0x00010001, 0x00000001, 0x00000000, /* Constant 3 name/type desc */ 103 0xab003469, 0x00020001, 0x00040001, 0x00000001, 0x00000000, /* Constant 4 name/type desc */ 104 0x0070766d, 0x00030003, 0x00040004, 0x00000001, 0x00000000, /* Constant 5 name/type desc */ 105 0x335f7376, 0xab00305f, /* Target name string */ 106 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 107 0x0000ffff}; /* END */ 108 109 static const D3DXCONSTANT_DESC ctab_basic_expected[] = { 110 {"mvp", D3DXRS_FLOAT4, 0, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, NULL}, 111 {"i", D3DXRS_FLOAT4, 4, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 112 {"i4", D3DXRS_FLOAT4, 5, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 1, 0, 16, NULL}, 113 {"f", D3DXRS_FLOAT4, 6, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 114 {"f4", D3DXRS_FLOAT4, 7, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 1, 0, 16, NULL}}; 115 116 static const DWORD ctab_matrices[] = { 117 0xfffe0300, /* vs_3_0 */ 118 0x0032fffe, FCC_CTAB, /* CTAB comment */ 119 0x0000001c, 0x000000b4, 0xfffe0300, 0x00000003, 0x0000001c, 0x20008100, /* Header */ 120 0x000000ac, 121 0x00000058, 0x00070002, 0x00000001, 0x00000064, 0x00000000, /* Constant 1 desc (fmatrix3x1) */ 122 0x00000074, 0x00000002, 0x00000004, 0x00000080, 0x00000000, /* Constant 2 desc (fmatrix4x4) */ 123 0x00000090, 0x00040002, 0x00000002, 0x0000009c, 0x00000000, /* Constant 3 desc (imatrix2x3) */ 124 0x74616D66, 0x33786972, 0xab003178, /* Constant 1 name */ 125 0x00030003, 0x00010003, 0x00000001, 0x00000000, /* Constant 1 type desc */ 126 0x74616D66, 0x34786972, 0xab003478, /* Constant 2 name */ 127 0x00030003, 0x00040004, 0x00000001, 0x00000000, /* Constant 2 type desc */ 128 0x74616D69, 0x32786972, 0xab003378, /* Constant 3 name */ 129 0x00020002, 0x00030002, 0x00000001, 0x00000000, /* Constant 3 type desc */ 130 0x335f7376, 0xab00305f, /* Target name string */ 131 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 132 0x0000ffff}; /* END */ 133 134 static const D3DXCONSTANT_DESC ctab_matrices_expected[] = { 135 {"fmatrix4x4", D3DXRS_FLOAT4, 0, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, NULL}, 136 {"imatrix2x3", D3DXRS_FLOAT4, 4, 2, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 1, 0, 24, NULL}, 137 {"fmatrix3x1", D3DXRS_FLOAT4, 7, 1, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 138 }; 139 140 static const DWORD ctab_matrices2[] = { 141 0xfffe0200, /* vs_2_0 */ 142 0x0058fffe, FCC_CTAB, /* CTAB comment */ 143 0x0000001c, 0x0000012b, 0xfffe0200, 0x00000006, 0x0000001c, 0x00000100, /* Header */ 144 0x00000124, 145 0x00000094, 0x00070002, 0x00000003, 0x0000009c, 0x00000000, /* Constant 1 desc (c2x3) */ 146 0x000000ac, 0x000d0002, 0x00000002, 0x000000b4, 0x00000000, /* Constant 2 desc (c3x2) */ 147 0x000000c4, 0x000a0002, 0x00000003, 0x000000cc, 0x00000000, /* Constant 3 desc (c3x3) */ 148 0x000000dc, 0x000f0002, 0x00000002, 0x000000e4, 0x00000000, /* Constant 4 desc (r2x3) */ 149 0x000000f4, 0x00040002, 0x00000003, 0x000000fc, 0x00000000, /* Constant 5 desc (r3x2) */ 150 0x0000010c, 0x00000002, 0x00000004, 0x00000114, 0x00000000, /* Constant 6 desc (r4x4) */ 151 0x33783263, 0xababab00, /* Constant 1 name */ 152 0x00030003, 0x00030002, 0x00000001, 0x00000000, /* Constant 1 type desc */ 153 0x32783363, 0xababab00, /* Constant 2 name */ 154 0x00030003, 0x00020003, 0x00000001, 0x00000000, /* Constant 2 type desc */ 155 0x33783363, 0xababab00, /* Constant 3 name */ 156 0x00030003, 0x00030003, 0x00000001, 0x00000000, /* Constant 3 type desc */ 157 0x33783272, 0xababab00, /* Constant 4 name */ 158 0x00030002, 0x00030002, 0x00000001, 0x00000000, /* Constant 4 type desc */ 159 0x32783372, 0xababab00, /* Constant 5 name */ 160 0x00030002, 0x00020003, 0x00000001, 0x00000000, /* Constant 5 type desc */ 161 0x34783472, 0xababab00, /* Constant 6 name */ 162 0x00030002, 0x00040004, 0x00000001, 0x00000000, /* Constant 6 type desc */ 163 0x325f7376, 0x4100305f, 0x41414141, 0x00414141, /* Target and Creator name */ 164 0x0000ffff}; /* END */ 165 166 static const D3DXCONSTANT_DESC ctab_matrices2_expected[] = { 167 {"c2x3", D3DXRS_FLOAT4, 7, 3, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 2, 3, 1, 0, 24, NULL}, 168 {"c3x2", D3DXRS_FLOAT4, 13, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 169 {"c3x3", D3DXRS_FLOAT4, 10, 3, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 3, 1, 0, 36, NULL}, 170 {"r2x3", D3DXRS_FLOAT4, 15, 2, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 1, 0, 24, NULL}, 171 {"r3x2", D3DXRS_FLOAT4, 4, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 172 {"r4x4", D3DXRS_FLOAT4, 0, 4, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, NULL}}; 173 174 static const DWORD ctab_arrays[] = { 175 0xfffe0300, /* vs_3_0 */ 176 0x0052fffe, FCC_CTAB, /* CTAB comment */ 177 0x0000001c, 0x0000013c, 0xfffe0300, 0x00000006, 0x0000001c, 0x20008100, /* Header */ 178 0x00000134, 179 0x00000094, 0x000E0002, 0x00000002, 0x0000009c, 0x00000000, /* Constant 1 desc (barray) */ 180 0x000000ac, 0x00100002, 0x00000002, 0x000000b8, 0x00000000, /* Constant 2 desc (bvecarray) */ 181 0x000000c8, 0x00080002, 0x00000004, 0x000000d0, 0x00000000, /* Constant 3 desc (farray) */ 182 0x000000e0, 0x00000002, 0x00000008, 0x000000ec, 0x00000000, /* Constant 4 desc (fmtxarray) */ 183 0x000000fc, 0x000C0002, 0x00000002, 0x00000108, 0x00000000, /* Constant 5 desc (fvecarray) */ 184 0x00000118, 0x00120002, 0x00000001, 0x00000124, 0x00000000, /* Constant 6 desc (ivecarray) */ 185 0x72726162, 0xab007961, /* Constant 1 name */ 186 0x00010000, 0x00010001, 0x00000002, 0x00000000, /* Constant 1 type desc */ 187 0x63657662, 0x61727261, 0xabab0079, /* Constant 2 name */ 188 0x00010001, 0x00030001, 0x00000003, 0x00000000, /* Constant 2 type desc */ 189 0x72726166, 0xab007961, /* Constant 3 name */ 190 0x00030000, 0x00010001, 0x00000004, 0x00000000, /* constant 3 type desc */ 191 0x78746d66, 0x61727261, 0xabab0079, /* Constant 4 name */ 192 0x00030002, 0x00040004, 0x00000002, 0x00000000, /* Constant 4 type desc */ 193 0x63657666, 0x61727261, 0xabab0079, /* Constant 5 name */ 194 0x00030001, 0x00040001, 0x00000002, 0x00000000, /* Constant 5 type desc */ 195 0x63657669, 0x61727261, 0xabab0079, /* Constant 6 name */ 196 0x00020001, 0x00040001, 0x00000001, 0x00000000, /* Constant 6 type desc */ 197 0x335f7376, 0xab00305f, /* Target name string */ 198 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 199 0x0000ffff}; /* END */ 200 201 static const D3DXCONSTANT_DESC ctab_arrays_expected[] = { 202 {"fmtxarray", D3DXRS_FLOAT4, 0, 8, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 2, 0, 128, NULL}, 203 {"farray", D3DXRS_FLOAT4, 8, 4, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 4, 0, 16, NULL}, 204 {"fvecarray", D3DXRS_FLOAT4, 12, 2, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 2, 0, 32, NULL}, 205 {"barray", D3DXRS_FLOAT4, 14, 2, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 2, 0, 8, NULL}, 206 {"bvecarray", D3DXRS_FLOAT4, 16, 2, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 3, 0, 36, NULL}, 207 {"ivecarray", D3DXRS_FLOAT4, 18, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 1, 0, 16, NULL}}; 208 209 static const DWORD ctab_with_default_values[] = { 210 0xfffe0200, /* vs_2_0 */ 211 0x007bfffe, FCC_CTAB, /* CTAB comment */ 212 0x0000001c, 0x000001b7, 0xfffe0200, 0x00000005, 0x0000001c, /* header */ 213 0x00000100, 0x000001b0, 214 0x00000080, 0x00080002, 0x00000003, 0x00000084, 0x00000094, /* constant 1 desc (arr) */ 215 0x000000c4, 0x000c0002, 0x00000001, 0x000000c8, 0x000000d8, /* constant 2 desc (flt) */ 216 0x000000e8, 0x00040002, 0x00000004, 0x000000f0, 0x00000100, /* constant 3 desc (mat3) */ 217 0x00000140, 0x00000002, 0x00000004, 0x000000f0, 0x00000148, /* constant 4 desc (mat4) */ 218 0x00000188, 0x000b0002, 0x00000001, 0x00000190, 0x000001a0, /* constant 5 desc (vec4) */ 219 0x00727261, /* constant 1 name */ 220 0x00030000, 0x00010001, 0x00000003, 0x00000000, /* constant 1 type desc */ 221 0x42c80000, 0x00000000, 0x00000000, 0x00000000, /* constant 1 default value */ 222 0x43480000, 0x00000000, 0x00000000, 0x00000000, 223 0x43960000, 0x00000000, 0x00000000, 0x00000000, 224 0x00746c66, /* constant 2 name */ 225 0x00030000, 0x00010001, 0x00000001, 0x00000000, /* constant 2 type desc */ 226 0x411fd70a, 0x00000000, 0x00000000, 0x00000000, /* constant 2 default value */ 227 0x3374616d, /* constant 3 name */ 228 0xababab00, 229 0x00030003, 0x00040004, 0x00000001, 0x00000000, /* constant 3 & 4 type desc */ 230 0x41300000, 0x425c0000, 0x42c60000, 0x44a42000, /* constat 3 default value */ 231 0x41b00000, 0x42840000, 0x447c8000, 0x44b0c000, 232 0x42040000, 0x429a0000, 0x448ae000, 0x44bd6000, 233 0x42300000, 0x42b00000, 0x44978000, 0x44ca0000, 234 0x3474616d, /* constant 4 name */ 235 0xababab00, 236 0x3f800000, 0x40a00000, 0x41100000, 0x41500000, /* constant 4 default value */ 237 0x40000000, 0x40c00000, 0x41200000, 0x41600000, 238 0x40400000, 0x40e00000, 0x41300000, 0x41700000, 239 0x40800000, 0x41000000, 0x41400000, 0x41800000, 240 0x34636576, /* constant 5 name */ 241 0xababab00, 242 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* constant 5 type desc */ 243 0x41200000, 0x41a00000, 0x41f00000, 0x42200000, /* constant 5 default value */ 244 0x325f7376, 0x4d004141, 0x41414141, 0x00000000, /* target & creator string */ 245 0x0000ffff}; /* END */ 246 247 static const float mat4_default_value[] = {1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16}; 248 static const float mat3_default_value[] = {11, 55, 99, 1313, 22, 66, 1010, 1414, 33, 77, 1111, 1515, 44, 88, 1212, 1616}; 249 static const float arr_default_value[] = {100, 0, 0, 0, 200, 0, 0, 0, 300, 0, 0, 0}; 250 static const float vec4_default_value[] = {10, 20, 30, 40}; 251 static const float flt_default_value[] = {9.99, 0, 0, 0}; 252 253 static const D3DXCONSTANT_DESC ctab_with_default_values_expected[] = { 254 {"mat4", D3DXRS_FLOAT4, 0, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, mat4_default_value}, 255 {"mat3", D3DXRS_FLOAT4, 4, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, mat3_default_value}, 256 {"arr", D3DXRS_FLOAT4, 8, 3, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 3, 0, 12, arr_default_value}, 257 {"vec4", D3DXRS_FLOAT4, 11, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 1, 0, 16, vec4_default_value}, 258 {"flt", D3DXRS_FLOAT4, 12, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, flt_default_value}}; 259 260 static const DWORD ctab_samplers[] = { 261 0xfffe0300, /* vs_3_0 */ 262 0x0032fffe, FCC_CTAB, /* CTAB comment */ 263 0x0000001c, 0x000000b4, 0xfffe0300, 0x00000003, 0x0000001c, 0x20008100, /* Header */ 264 0x000000ac, 265 0x00000058, 0x00020002, 0x00000001, 0x00000064, 0x00000000, /* Constant 1 desc (notsampler) */ 266 0x00000074, 0x00000003, 0x00000001, 0x00000080, 0x00000000, /* Constant 2 desc (sampler1) */ 267 0x00000090, 0x00030003, 0x00000001, 0x0000009c, 0x00000000, /* Constant 3 desc (sampler2) */ 268 0x73746f6e, 0x6c706d61, 0xab007265, /* Constant 1 name */ 269 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* Constant 1 type desc */ 270 0x706d6173, 0x3172656c, 0xababab00, /* Constant 2 name */ 271 0x000c0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 2 type desc */ 272 0x706d6173, 0x3272656c, 0xababab00, /* Constant 3 name */ 273 0x000d0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 3 type desc */ 274 0x335f7376, 0xab00305f, /* Target name string */ 275 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 276 0x0000ffff}; /* END */ 277 278 static const D3DXCONSTANT_DESC ctab_samplers_expected[] = { 279 {"sampler1", D3DXRS_SAMPLER, 0, 1, D3DXPC_OBJECT, D3DXPT_SAMPLER2D, 1, 1, 1, 0, 4, NULL}, 280 {"sampler2", D3DXRS_SAMPLER, 3, 1, D3DXPC_OBJECT, D3DXPT_SAMPLER3D, 1, 1, 1, 0, 4, NULL}, 281 {"notsampler", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 1, 0, 16, NULL}}; 282 283 static const DWORD fx_shader_with_ctab[] = 284 { 285 0x46580200, /* FX20 */ 286 0x002efffe, FCC_CTAB, /* CTAB comment */ 287 0x0000001c, 0x000000a4, 0xfffe0300, 0x00000003, 0x0000001c, 0x20008100, /* Header */ 288 0x0000009c, 289 0x00000058, 0x00070002, 0x00000001, 0x00000064, 0x00000000, /* Constant 1 desc */ 290 0x00000074, 0x00000002, 0x00000004, 0x00000080, 0x00000000, /* Constant 2 desc */ 291 0x00000090, 0x00040002, 0x00000003, 0x00000080, 0x00000000, /* Constant 3 desc */ 292 0x736e6f43, 0x746e6174, 0xabab0031, /* Constant 1 name string */ 293 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* Constant 1 type desc */ 294 0x736e6f43, 0x746e6174, 0xabab0032, /* Constant 2 name string */ 295 0x00030003, 0x00040004, 0x00000001, 0x00000000, /* Constant 2 & 3 type desc */ 296 0x736e6f43, 0x746e6174, 0xabab0033, /* Constant 3 name string */ 297 0x335f7376, 0xab00305f, /* Target name string */ 298 0x656e6957, 0x6f727020, 0x7463656a, 0xababab00, /* Creator name string */ 299 0x0000ffff /* END */ 300 }; 301 302 static void test_get_shader_size(void) 303 { 304 UINT shader_size, expected; 305 306 shader_size = D3DXGetShaderSize(simple_vs); 307 expected = sizeof(simple_vs); 308 ok(shader_size == expected, "Got shader size %u, expected %u\n", shader_size, expected); 309 310 shader_size = D3DXGetShaderSize(simple_ps); 311 expected = sizeof(simple_ps); 312 ok(shader_size == expected, "Got shader size %u, expected %u\n", shader_size, expected); 313 314 shader_size = D3DXGetShaderSize(NULL); 315 ok(shader_size == 0, "Got shader size %u, expected 0\n", shader_size); 316 } 317 318 static void test_get_shader_version(void) 319 { 320 DWORD shader_version; 321 322 shader_version = D3DXGetShaderVersion(simple_vs); 323 ok(shader_version == D3DVS_VERSION(1, 1), "Got shader version 0x%08x, expected 0x%08x\n", 324 shader_version, D3DVS_VERSION(1, 1)); 325 326 shader_version = D3DXGetShaderVersion(simple_ps); 327 ok(shader_version == D3DPS_VERSION(1, 1), "Got shader version 0x%08x, expected 0x%08x\n", 328 shader_version, D3DPS_VERSION(1, 1)); 329 330 shader_version = D3DXGetShaderVersion(NULL); 331 ok(shader_version == 0, "Got shader version 0x%08x, expected 0\n", shader_version); 332 } 333 334 static void test_find_shader_comment(void) 335 { 336 const void *data = (void *)0xdeadbeef; 337 HRESULT hr; 338 UINT size = 100; 339 340 hr = D3DXFindShaderComment(NULL, MAKEFOURCC('C','T','A','B'), &data, &size); 341 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); 342 ok(!data, "Got %p, expected NULL\n", data); 343 ok(!size, "Got %u, expected 0\n", size); 344 345 hr = D3DXFindShaderComment(shader_with_ctab, MAKEFOURCC('C','T','A','B'), NULL, &size); 346 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 347 ok(size == 28, "Got %u, expected 28\n", size); 348 349 hr = D3DXFindShaderComment(shader_with_ctab, MAKEFOURCC('C','T','A','B'), &data, NULL); 350 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 351 ok(data == shader_with_ctab + 6, "Got result %p, expected %p\n", data, shader_with_ctab + 6); 352 353 hr = D3DXFindShaderComment(shader_with_ctab, 0, &data, &size); 354 ok(hr == S_FALSE, "Got result %x, expected 1 (S_FALSE)\n", hr); 355 ok(!data, "Got %p, expected NULL\n", data); 356 ok(!size, "Got %u, expected 0\n", size); 357 358 hr = D3DXFindShaderComment(shader_with_ctab, MAKEFOURCC('X','X','X','X'), &data, &size); 359 ok(hr == S_FALSE, "Got result %x, expected 1 (S_FALSE)\n", hr); 360 ok(!data, "Got %p, expected NULL\n", data); 361 ok(!size, "Got %u, expected 0\n", size); 362 363 hr = D3DXFindShaderComment(shader_with_ctab, MAKEFOURCC('C','T','A','B'), &data, &size); 364 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 365 ok(data == shader_with_ctab + 6, "Got result %p, expected %p\n", data, shader_with_ctab + 6); 366 ok(size == 28, "Got result %u, expected 28\n", size); 367 368 hr = D3DXFindShaderComment(shader_zero, MAKEFOURCC('C','T','A','B'), &data, &size); 369 ok(hr == D3DXERR_INVALIDDATA, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA); 370 ok(!data, "Got %p, expected NULL\n", data); 371 ok(!size, "Got %u, expected 0\n", size); 372 373 hr = D3DXFindShaderComment(shader_invalid, MAKEFOURCC('C','T','A','B'), &data, &size); 374 ok(hr == D3DXERR_INVALIDDATA, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA); 375 ok(!data, "Got %p, expected NULL\n", data); 376 ok(!size, "Got %u, expected 0\n", size); 377 378 hr = D3DXFindShaderComment(shader_empty, MAKEFOURCC('C','T','A','B'), &data, &size); 379 ok(hr == S_FALSE, "Got result %x, expected %x (S_FALSE)\n", hr, S_FALSE); 380 ok(!data, "Got %p, expected NULL\n", data); 381 ok(!size, "Got %u, expected 0\n", size); 382 383 hr = D3DXFindShaderComment(simple_fx, FCC_TEXT, &data, &size); 384 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 385 ok(data == simple_fx + 3, "Got result %p, expected %p\n", data, simple_fx + 3); 386 ok(size == 4, "Got result %u, expected 4\n", size); 387 388 hr = D3DXFindShaderComment(simple_tx, FCC_TEXT, &data, &size); 389 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 390 ok(data == simple_tx + 3, "Got result %p, expected %p\n", data, simple_tx + 3); 391 ok(size == 4, "Got result %u, expected 4\n", size); 392 393 hr = D3DXFindShaderComment(simple_7ffe, FCC_TEXT, &data, &size); 394 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 395 ok(data == simple_7ffe + 3, "Got result %p, expected %p\n", data, simple_7ffe + 3); 396 ok(size == 4, "Got result %u, expected 4\n", size); 397 398 hr = D3DXFindShaderComment(simple_7fff, FCC_TEXT, &data, &size); 399 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 400 ok(data == simple_7fff + 3, "Got result %p, expected %p\n", data, simple_7fff + 3); 401 ok(size == 4, "Got result %u, expected 4\n", size); 402 } 403 404 static void test_get_shader_constant_table_ex(void) 405 { 406 ID3DXConstantTable *constant_table; 407 HRESULT hr; 408 void *data; 409 DWORD size; 410 D3DXCONSTANTTABLE_DESC desc; 411 412 constant_table = (ID3DXConstantTable *)0xdeadbeef; 413 hr = D3DXGetShaderConstantTableEx(NULL, 0, &constant_table); 414 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); 415 ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table); 416 417 constant_table = (ID3DXConstantTable *)0xdeadbeef; 418 hr = D3DXGetShaderConstantTableEx(shader_zero, 0, &constant_table); 419 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK); 420 ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table); 421 422 constant_table = (ID3DXConstantTable *)0xdeadbeef; 423 hr = D3DXGetShaderConstantTableEx(shader_invalid, 0, &constant_table); 424 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK); 425 ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table); 426 427 constant_table = (ID3DXConstantTable *)0xdeadbeef; 428 hr = D3DXGetShaderConstantTableEx(shader_empty, 0, &constant_table); 429 ok(hr == D3DXERR_INVALIDDATA, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA); 430 ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table); 431 432 /* No CTAB data */ 433 constant_table = (ID3DXConstantTable *)0xdeadbeef; 434 hr = D3DXGetShaderConstantTableEx(simple_ps, 0, &constant_table); 435 ok(hr == D3DXERR_INVALIDDATA, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA); 436 ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table); 437 438 /* With invalid CTAB data */ 439 hr = D3DXGetShaderConstantTableEx(shader_with_invalid_ctab, 0, &constant_table); 440 ok(hr == D3DXERR_INVALIDDATA || broken(hr == D3D_OK), /* winxp 64-bit, w2k3 64-bit */ 441 "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA); 442 if (constant_table) ID3DXConstantTable_Release(constant_table); 443 444 hr = D3DXGetShaderConstantTableEx(simple_fx, 0, &constant_table); 445 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr); 446 ok(!constant_table, "D3DXGetShaderConstantTableEx() returned a non-NULL constant table.\n"); 447 448 hr = D3DXGetShaderConstantTableEx(simple_tx, 0, &constant_table); 449 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr); 450 ok(!constant_table, "D3DXGetShaderConstantTableEx() returned a non-NULL constant table.\n"); 451 452 hr = D3DXGetShaderConstantTableEx(shader_with_ctab, 0, &constant_table); 453 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 454 ok(constant_table != NULL, "D3DXGetShaderConstantTableEx() failed, got NULL\n"); 455 456 if (constant_table) 457 { 458 size = ID3DXConstantTable_GetBufferSize(constant_table); 459 ok(size == 28, "Got result %x, expected 28\n", size); 460 461 data = ID3DXConstantTable_GetBufferPointer(constant_table); 462 ok(!memcmp(data, shader_with_ctab + 6, size), "Retrieved wrong CTAB data\n"); 463 464 hr = ID3DXConstantTable_GetDesc(constant_table, NULL); 465 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); 466 467 hr = ID3DXConstantTable_GetDesc(constant_table, &desc); 468 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 469 ok(desc.Creator == (const char *)data + 0x10, "Got result %p, expected %p\n", 470 desc.Creator, (const char *)data + 0x10); 471 ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); 472 ok(desc.Constants == 0, "Got result %x, expected 0\n", desc.Constants); 473 474 ID3DXConstantTable_Release(constant_table); 475 } 476 477 hr = D3DXGetShaderConstantTableEx(shader_with_ctab_constants, 0, &constant_table); 478 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 479 ok(constant_table != NULL, "D3DXGetShaderConstantTableEx() failed, got NULL\n"); 480 481 if (constant_table) 482 { 483 D3DXHANDLE constant; 484 D3DXCONSTANT_DESC constant_desc; 485 D3DXCONSTANT_DESC constant_desc_save; 486 UINT nb; 487 488 /* Test GetDesc */ 489 hr = ID3DXConstantTable_GetDesc(constant_table, &desc); 490 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 491 ok(!strcmp(desc.Creator, "Wine project"), "Got result '%s', expected 'Wine project'\n", desc.Creator); 492 ok(desc.Version == D3DVS_VERSION(3, 0), "Got result %x, expected %x\n", desc.Version, D3DVS_VERSION(3, 0)); 493 ok(desc.Constants == 3, "Got result %x, expected 3\n", desc.Constants); 494 495 /* Test GetConstant */ 496 constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); 497 ok(constant != NULL, "No constant found\n"); 498 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); 499 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 500 ok(!strcmp(constant_desc.Name, "Constant1"), "Got result '%s', expected 'Constant1'\n", 501 constant_desc.Name); 502 ok(constant_desc.Class == D3DXPC_VECTOR, "Got result %x, expected %u (D3DXPC_VECTOR)\n", 503 constant_desc.Class, D3DXPC_VECTOR); 504 ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", 505 constant_desc.Type, D3DXPT_FLOAT); 506 ok(constant_desc.Rows == 1, "Got result %x, expected 1\n", constant_desc.Rows); 507 ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); 508 509 constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 1); 510 ok(constant != NULL, "No constant found\n"); 511 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); 512 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 513 ok(!strcmp(constant_desc.Name, "Constant2"), "Got result '%s', expected 'Constant2'\n", 514 constant_desc.Name); 515 ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", 516 constant_desc.Class, D3DXPC_MATRIX_COLUMNS); 517 ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", 518 constant_desc.Type, D3DXPT_FLOAT); 519 ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); 520 ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); 521 522 constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 2); 523 ok(constant != NULL, "No constant found\n"); 524 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); 525 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 526 ok(!strcmp(constant_desc.Name, "Constant3"), "Got result '%s', expected 'Constant3'\n", 527 constant_desc.Name); 528 ok(constant_desc.Class == D3DXPC_MATRIX_COLUMNS, "Got result %x, expected %u (D3DXPC_MATRIX_COLUMNS)\n", 529 constant_desc.Class, D3DXPC_MATRIX_COLUMNS); 530 ok(constant_desc.Type == D3DXPT_FLOAT, "Got result %x, expected %u (D3DXPT_FLOAT)\n", 531 constant_desc.Type, D3DXPT_FLOAT); 532 ok(constant_desc.Rows == 4, "Got result %x, expected 1\n", constant_desc.Rows); 533 ok(constant_desc.Columns == 4, "Got result %x, expected 4\n", constant_desc.Columns); 534 constant_desc_save = constant_desc; /* For GetConstantDesc test */ 535 536 constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 3); 537 ok(constant == NULL, "Got result %p, expected NULL\n", constant); 538 539 /* Test GetConstantByName */ 540 constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant unknown"); 541 ok(constant == NULL, "Got result %p, expected NULL\n", constant); 542 constant = ID3DXConstantTable_GetConstantByName(constant_table, NULL, "Constant3"); 543 ok(constant != NULL, "No constant found\n"); 544 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, &nb); 545 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 546 ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); 547 548 /* Test GetConstantDesc */ 549 constant = ID3DXConstantTable_GetConstant(constant_table, NULL, 0); 550 ok(constant != NULL, "No constant found\n"); 551 hr = ID3DXConstantTable_GetConstantDesc(constant_table, NULL, &constant_desc, &nb); 552 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); 553 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, NULL, &nb); 554 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 555 hr = ID3DXConstantTable_GetConstantDesc(constant_table, constant, &constant_desc, NULL); 556 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 557 hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant unknown", &constant_desc, &nb); 558 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL); 559 hr = ID3DXConstantTable_GetConstantDesc(constant_table, "Constant3", &constant_desc, &nb); 560 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr); 561 ok(!memcmp(&constant_desc, &constant_desc_save, sizeof(D3DXCONSTANT_DESC)), "Got different constant data\n"); 562 563 ID3DXConstantTable_Release(constant_table); 564 } 565 566 hr = D3DXGetShaderConstantTableEx(fx_shader_with_ctab, 0, &constant_table); 567 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr); 568 ok(!constant_table, "D3DXGetShaderConstantTableEx() returned a non-NULL constant table.\n"); 569 } 570 571 static void test_constant_table(const char *test_name, const DWORD *ctable_fn, 572 const D3DXCONSTANT_DESC *expecteds, UINT count) 573 { 574 UINT i; 575 ID3DXConstantTable *ctable; 576 577 HRESULT res; 578 579 /* Get the constant table from the shader itself */ 580 res = D3DXGetShaderConstantTable(ctable_fn, &ctable); 581 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed on %s: got %08x\n", test_name, res); 582 583 for (i = 0; i < count; i++) 584 { 585 const D3DXCONSTANT_DESC *expected = &expecteds[i]; 586 D3DXHANDLE const_handle; 587 D3DXCONSTANT_DESC actual; 588 UINT pCount = 1; 589 590 const_handle = ID3DXConstantTable_GetConstantByName(ctable, NULL, expected->Name); 591 592 res = ID3DXConstantTable_GetConstantDesc(ctable, const_handle, &actual, &pCount); 593 ok(SUCCEEDED(res), "%s in %s: ID3DXConstantTable_GetConstantDesc returned %08x\n", expected->Name, 594 test_name, res); 595 ok(pCount == 1, "%s in %s: Got more or less descriptions: %d\n", expected->Name, test_name, pCount); 596 597 ok(strcmp(actual.Name, expected->Name) == 0, 598 "%s in %s: Got different names: Got %s, expected %s\n", expected->Name, 599 test_name, actual.Name, expected->Name); 600 ok(actual.RegisterSet == expected->RegisterSet, 601 "%s in %s: Got different register sets: Got %d, expected %d\n", 602 expected->Name, test_name, actual.RegisterSet, expected->RegisterSet); 603 ok(actual.RegisterIndex == expected->RegisterIndex, 604 "%s in %s: Got different register indices: Got %d, expected %d\n", 605 expected->Name, test_name, actual.RegisterIndex, expected->RegisterIndex); 606 ok(actual.RegisterCount == expected->RegisterCount, 607 "%s in %s: Got different register counts: Got %d, expected %d\n", 608 expected->Name, test_name, actual.RegisterCount, expected->RegisterCount); 609 ok(actual.Class == expected->Class, 610 "%s in %s: Got different classes: Got %d, expected %d\n", expected->Name, 611 test_name, actual.Class, expected->Class); 612 ok(actual.Type == expected->Type, 613 "%s in %s: Got different types: Got %d, expected %d\n", expected->Name, 614 test_name, actual.Type, expected->Type); 615 ok(actual.Rows == expected->Rows && actual.Columns == expected->Columns, 616 "%s in %s: Got different dimensions: Got (%d, %d), expected (%d, %d)\n", 617 expected->Name, test_name, actual.Rows, actual.Columns, expected->Rows, 618 expected->Columns); 619 ok(actual.Elements == expected->Elements, 620 "%s in %s: Got different element count: Got %d, expected %d\n", 621 expected->Name, test_name, actual.Elements, expected->Elements); 622 ok(actual.StructMembers == expected->StructMembers, 623 "%s in %s: Got different struct member count: Got %d, expected %d\n", 624 expected->Name, test_name, actual.StructMembers, expected->StructMembers); 625 ok(actual.Bytes == expected->Bytes, 626 "%s in %s: Got different byte count: Got %d, expected %d\n", 627 expected->Name, test_name, actual.Bytes, expected->Bytes); 628 629 if (!expected->DefaultValue) 630 { 631 ok(actual.DefaultValue == NULL, 632 "%s in %s: Got different default value: expected NULL\n", 633 expected->Name, test_name); 634 } 635 else 636 { 637 ok(actual.DefaultValue != NULL, 638 "%s in %s: Got different default value: expected non-NULL\n", 639 expected->Name, test_name); 640 ok(memcmp(actual.DefaultValue, expected->DefaultValue, expected->Bytes) == 0, 641 "%s in %s: Got different default value\n", expected->Name, test_name); 642 } 643 } 644 645 /* Finally, release the constant table */ 646 ID3DXConstantTable_Release(ctable); 647 } 648 649 static void test_constant_tables(void) 650 { 651 test_constant_table("test_basic", ctab_basic, ctab_basic_expected, 652 ARRAY_SIZE(ctab_basic_expected)); 653 test_constant_table("test_matrices", ctab_matrices, ctab_matrices_expected, 654 ARRAY_SIZE(ctab_matrices_expected)); 655 test_constant_table("test_matrices2", ctab_matrices2, ctab_matrices2_expected, 656 ARRAY_SIZE(ctab_matrices2_expected)); 657 test_constant_table("test_arrays", ctab_arrays, ctab_arrays_expected, 658 ARRAY_SIZE(ctab_arrays_expected)); 659 test_constant_table("test_default_values", ctab_with_default_values, ctab_with_default_values_expected, 660 ARRAY_SIZE(ctab_with_default_values_expected)); 661 test_constant_table("test_samplers", ctab_samplers, ctab_samplers_expected, 662 ARRAY_SIZE(ctab_samplers_expected)); 663 } 664 665 static void test_setting_basic_table(IDirect3DDevice9 *device) 666 { 667 static const D3DXMATRIX mvp = {{{ 668 0.514f, 0.626f, 0.804f, 0.786f, 669 0.238f, 0.956f, 0.374f, 0.483f, 670 0.109f, 0.586f, 0.900f, 0.255f, 671 0.898f, 0.411f, 0.932f, 0.275f}}}; 672 static const D3DXVECTOR4 f4 = {0.350f, 0.526f, 0.925f, 0.021f}; 673 static const float f = 0.12543f; 674 static const int i = 321; 675 static const D3DXMATRIX *matrix_pointer[] = {&mvp}; 676 677 ID3DXConstantTable *ctable; 678 679 HRESULT res; 680 float out[16]; 681 ULONG refcnt; 682 683 /* Get the constant table from the shader itself */ 684 res = D3DXGetShaderConstantTable(ctab_basic, &ctable); 685 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got 0x%08x\n", res); 686 687 /* Set constants */ 688 res = ID3DXConstantTable_SetMatrix(ctable, device, "mvp", &mvp); 689 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable mvp: got 0x%08x\n", res); 690 691 res = ID3DXConstantTable_SetInt(ctable, device, "i", i + 1); 692 ok(res == D3D_OK, "ID3DXConstantTable_SetInt failed on variable i: got 0x%08x\n", res); 693 694 /* Check that setting i again will overwrite the previous value */ 695 res = ID3DXConstantTable_SetInt(ctable, device, "i", i); 696 ok(res == D3D_OK, "ID3DXConstantTable_SetInt failed on variable i: got 0x%08x\n", res); 697 698 res = ID3DXConstantTable_SetFloat(ctable, device, "f", f); 699 ok(res == D3D_OK, "ID3DXConstantTable_SetFloat failed on variable f: got 0x%08x\n", res); 700 701 res = ID3DXConstantTable_SetVector(ctable, device, "f4", &f4); 702 ok(res == D3D_OK, "ID3DXConstantTable_SetVector failed on variable f4: got 0x%08x\n", res); 703 704 /* Get constants back and validate */ 705 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 706 ok(out[0] == S(U(mvp))._11 && out[4] == S(U(mvp))._12 && out[8] == S(U(mvp))._13 && out[12] == S(U(mvp))._14, 707 "The first row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 708 out[0], out[4], out[8], out[12], S(U(mvp))._11, S(U(mvp))._12, S(U(mvp))._13, S(U(mvp))._14); 709 ok(out[1] == S(U(mvp))._21 && out[5] == S(U(mvp))._22 && out[9] == S(U(mvp))._23 && out[13] == S(U(mvp))._24, 710 "The second row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 711 out[1], out[5], out[9], out[13], S(U(mvp))._21, S(U(mvp))._22, S(U(mvp))._23, S(U(mvp))._24); 712 ok(out[2] == S(U(mvp))._31 && out[6] == S(U(mvp))._32 && out[10] == S(U(mvp))._33 && out[14] == S(U(mvp))._34, 713 "The third row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 714 out[2], out[6], out[10], out[14], S(U(mvp))._31, S(U(mvp))._32, S(U(mvp))._33, S(U(mvp))._34); 715 ok(out[3] == S(U(mvp))._41 && out[7] == S(U(mvp))._42 && out[11] == S(U(mvp))._43 && out[15] == S(U(mvp))._44, 716 "The fourth row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 717 out[3], out[7], out[11], out[15], S(U(mvp))._41, S(U(mvp))._42, S(U(mvp))._43, S(U(mvp))._44); 718 719 IDirect3DDevice9_GetVertexShaderConstantF(device, 4, out, 1); 720 ok(out[0] == (float)i && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 721 "The variable i was not set correctly, out={%f, %f, %f, %f}, should be {%d, 0.0, 0.0, 0.0}\n", 722 out[0], out[1], out[2], out[3], i); 723 724 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 725 ok(out[0] == f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 726 "The variable f was not set correctly, out={%f, %f, %f, %f}, should be {%f, 0.0, 0.0, 0.0}\n", 727 out[0], out[1], out[2], out[3], f); 728 729 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 730 ok(memcmp(out, &f4, sizeof(f4)) == 0, 731 "The variable f4 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 732 out[0], out[1], out[2], out[3], f4.x, f4.y, f4.z, f4.w); 733 734 /* Finally test using a set* function for one type to set a variable of another type (should succeed) */ 735 res = ID3DXConstantTable_SetVector(ctable, device, "f", &f4); 736 ok(res == D3D_OK, "ID3DXConstantTable_SetVector failed on variable f: 0x%08x\n", res); 737 738 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 739 ok(out[0] == f4.x && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 740 "The variable f was not set correctly by ID3DXConstantTable_SetVector, got %f, should be %f\n", 741 out[0], f4.x); 742 743 memset(out, 0, sizeof(out)); 744 IDirect3DDevice9_SetVertexShaderConstantF(device, 6, out, 1); 745 res = ID3DXConstantTable_SetMatrix(ctable, device, "f", &mvp); 746 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable f: 0x%08x\n", res); 747 748 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 749 ok(out[0] == S(U(mvp))._11 && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 750 "The variable f was not set correctly by ID3DXConstantTable_SetMatrix, got %f, should be %f\n", 751 out[0], S(U(mvp))._11); 752 753 /* Clear registers */ 754 memset(out, 0, sizeof(out)); 755 IDirect3DDevice9_SetVertexShaderConstantF(device, 0, out, 4); 756 IDirect3DDevice9_SetVertexShaderConstantF(device, 6, out, 1); 757 IDirect3DDevice9_SetVertexShaderConstantF(device, 7, out, 1); 758 759 /* SetVector shouldn't change the value of a matrix constant */ 760 res = ID3DXConstantTable_SetVector(ctable, device, "mvp", &f4); 761 ok(res == D3D_OK, "ID3DXConstantTable_SetVector failed on variable f: 0x%08x\n", res); 762 763 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 764 ok(out[0] == 0.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f 765 && out[4] == 0.0f && out[5] == 0.0f && out[6] == 0.0f && out[7] == 0.0f 766 && out[8] == 0.0f && out[9] == 0.0f && out[10] == 0.0f && out[11] == 0.0f 767 && out[12] == 0.0f && out[13] == 0.0f && out[14] == 0.0f && out[15] == 0.0f, 768 "The variable mvp was not set correctly by ID3DXConstantTable_SetVector, " 769 "got {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f %f; %f, %f, %f, %f}, " 770 "should be all 0.0f\n", 771 out[0], out[1], out[2], out[3], 772 out[4], out[5], out[6], out[7], 773 out[8], out[9], out[10], out[11], 774 out[12], out[13], out[14], out[15]); 775 776 res = ID3DXConstantTable_SetFloat(ctable, device, "mvp", f); 777 ok(res == D3D_OK, "ID3DXConstantTable_SetFloat failed on variable mvp: 0x%08x\n", res); 778 779 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 780 ok(out[0] == 0.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f 781 && out[4] == 0.0f && out[5] == 0.0f && out[6] == 0.0f && out[7] == 0.0f 782 && out[8] == 0.0f && out[9] == 0.0f && out[10] == 0.0f && out[11] == 0.0f 783 && out[12] == 0.0f && out[13] == 0.0f && out[14] == 0.0f && out[15] == 0.0f, 784 "The variable mvp was not set correctly by ID3DXConstantTable_SetFloat, " 785 "got {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f %f; %f, %f, %f, %f}, " 786 "should be all 0.0f\n", 787 out[0], out[1], out[2], out[3], 788 out[4], out[5], out[6], out[7], 789 out[8], out[9], out[10], out[11], 790 out[12], out[13], out[14], out[15]); 791 792 res = ID3DXConstantTable_SetFloat(ctable, device, "f4", f); 793 ok(res == D3D_OK, "ID3DXConstantTable_SetFloat failed on variable f4: 0x%08x\n", res); 794 795 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 796 ok(out[0] == 0.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 797 "The variable f4 was not set correctly by ID3DXConstantTable_SetFloat, " 798 "got {%f, %f, %f, %f}, should be all 0.0f\n", 799 out[0], out[1], out[2], out[3]); 800 801 res = ID3DXConstantTable_SetMatrixTranspose(ctable, device, "f", &mvp); 802 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTranspose failed on variable f: 0x%08x\n", res); 803 804 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 805 ok(out[0] == S(U(mvp))._11 && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 806 "The variable f was not set correctly by ID3DXConstantTable_SetMatrixTranspose, got %f, should be %f\n", 807 out[0], S(U(mvp))._11); 808 809 res = ID3DXConstantTable_SetMatrixTranspose(ctable, device, "f4", &mvp); 810 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTranspose failed on variable f4: 0x%08x\n", res); 811 812 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 813 ok(out[0] == S(U(mvp))._11 && out[1] == S(U(mvp))._21 && out[2] == S(U(mvp))._31 && out[3] == S(U(mvp))._41, 814 "The variable f4 was not set correctly by ID3DXConstantTable_SetMatrixTranspose, " 815 "got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 816 out[0], out[1], out[2], out[3], 817 S(U(mvp))._11, S(U(mvp))._21, S(U(mvp))._31, S(U(mvp))._41); 818 819 memset(out, 0, sizeof(out)); 820 IDirect3DDevice9_SetVertexShaderConstantF(device, 6, out, 1); 821 res = ID3DXConstantTable_SetMatrixPointerArray(ctable, device, "f", matrix_pointer, 1); 822 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixPointerArray failed on variable f: got %#x\n", res); 823 824 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 825 ok(out[0] == S(U(mvp))._11 && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 826 "The variable f was not set correctly by ID3DXConstantTable_SetMatrixPointerArray, " 827 "got %f, should be %f\n", 828 out[0], S(U(mvp))._11); 829 830 res = ID3DXConstantTable_SetMatrixPointerArray(ctable, device, "f4", matrix_pointer, 1); 831 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixPointerArray failed on variable f4: got %#x\n", res); 832 833 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 834 ok(out[0] == S(U(mvp))._11 && out[1] == S(U(mvp))._12 && out[2] == S(U(mvp))._13 && out[3] == S(U(mvp))._14, 835 "The variable f4 was not set correctly by ID3DXConstantTable_SetMatrixPointerArray, " 836 "got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 837 out[0], out[1], out[2], out[3], 838 S(U(mvp))._11, S(U(mvp))._12, S(U(mvp))._13, S(U(mvp))._14); 839 840 memset(out, 0, sizeof(out)); 841 IDirect3DDevice9_SetVertexShaderConstantF(device, 6, out, 1); 842 res = ID3DXConstantTable_SetMatrixTransposePointerArray(ctable, device, "f", matrix_pointer, 1); 843 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTransposePointerArray failed on variable f: got %#x\n", res); 844 845 IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1); 846 ok(out[0] == S(U(mvp))._11 && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 847 "The variable f was not set correctly by ID3DXConstantTable_SetMatrixTransposePointerArray, " 848 "got %f, should be %f\n", 849 out[0], S(U(mvp))._11); 850 851 res = ID3DXConstantTable_SetMatrixTransposePointerArray(ctable, device, "f4", matrix_pointer, 1); 852 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTransposePointerArray failed on variable f4: got %#x\n", res); 853 854 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 855 ok(out[0] == S(U(mvp))._11 && out[1] == S(U(mvp))._21 && out[2] == S(U(mvp))._31 && out[3] == S(U(mvp))._41, 856 "The variable f4 was not set correctly by ID3DXConstantTable_SetMatrixTransposePointerArray, " 857 "got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 858 out[0], out[1], out[2], out[3], 859 S(U(mvp))._11, S(U(mvp))._21, S(U(mvp))._31, S(U(mvp))._41); 860 861 refcnt = ID3DXConstantTable_Release(ctable); 862 ok(refcnt == 0, "The constant table reference count was %u, should be 0\n", refcnt); 863 } 864 865 static void test_setting_matrices_table(IDirect3DDevice9 *device) 866 { 867 static const D3DXMATRIX fmatrix = 868 {{{2.001f, 1.502f, 9.003f, 1.004f, 869 5.005f, 3.006f, 3.007f, 6.008f, 870 9.009f, 5.010f, 7.011f, 1.012f, 871 5.013f, 5.014f, 5.015f, 9.016f}}}; 872 static const D3DXMATRIX *matrix_pointer[] = {&fmatrix}; 873 874 ID3DXConstantTable *ctable; 875 876 HRESULT res; 877 float out[32]; 878 879 res = D3DXGetShaderConstantTable(ctab_matrices, &ctable); 880 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %#x\n", res); 881 882 res = ID3DXConstantTable_SetMatrix(ctable, device, "imatrix2x3", &fmatrix); 883 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable imatrix2x3: got %#x\n", res); 884 885 res = ID3DXConstantTable_SetMatrix(ctable, device, "fmatrix3x1", &fmatrix); 886 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable fmatrix3x1: got %#x\n", res); 887 888 IDirect3DDevice9_GetVertexShaderConstantF(device, 4, out, 2); 889 ok(out[0] == (int)S(U(fmatrix))._11 && out[1] == (int)S(U(fmatrix))._12 && out[2] == (int)S(U(fmatrix))._13 890 && out[3] == 0 891 && out[4] == (int)S(U(fmatrix))._21 && out[5] == (int)S(U(fmatrix))._22 && out[6] == (int)S(U(fmatrix))._23 892 && out[7] == 0, 893 "The variable imatrix2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 894 "should be {%d, %d, %d, %d; %d, %d, %d, %d}\n", 895 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 896 (int)S(U(fmatrix))._11, (int)S(U(fmatrix))._12, (int)S(U(fmatrix))._13, 0, 897 (int)S(U(fmatrix))._21, (int)S(U(fmatrix))._22, (int)S(U(fmatrix))._23, 0); 898 899 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 900 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == S(U(fmatrix))._31 && out[3] == 0.0f, 901 "The variable fmatrix3x1 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 902 out[0], out[1], out[2], out[3], 903 S(U(fmatrix))._11, S(U(fmatrix))._21, S(U(fmatrix))._31, 0.0f); 904 905 ID3DXConstantTable_Release(ctable); 906 907 res = D3DXGetShaderConstantTable(ctab_matrices2, &ctable); 908 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %#x\n", res); 909 910 /* SetMatrix */ 911 res = ID3DXConstantTable_SetMatrix(ctable, device, "c2x3", &fmatrix); 912 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable c2x3: got %#x\n", res); 913 914 res = ID3DXConstantTable_SetMatrix(ctable, device, "r2x3", &fmatrix); 915 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable r2x3: got %#x\n", res); 916 917 res = ID3DXConstantTable_SetMatrix(ctable, device, "c3x2", &fmatrix); 918 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable c3x2: got %#x\n", res); 919 920 res = ID3DXConstantTable_SetMatrix(ctable, device, "r3x2", &fmatrix); 921 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable r3x2: got %#x\n", res); 922 923 res = ID3DXConstantTable_SetMatrix(ctable, device, "c3x3", &fmatrix); 924 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable c3x3: got %#x\n", res); 925 926 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 3); 927 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == 0.0f && out[3] == 0.0f 928 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == 0.0f && out[7] == 0.0f 929 && out[8] == S(U(fmatrix))._13 && out[9] == S(U(fmatrix))._23 && out[10] == 0.0f && out[11] == 0.0f, 930 "The variable c2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 931 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 932 out[0], out[1], out[2], out[3], 933 out[4], out[5], out[6], out[7], 934 out[8], out[9], out[10], out[11], 935 S(U(fmatrix))._11, S(U(fmatrix))._21, 0.0f, 0.0f, 936 S(U(fmatrix))._12, S(U(fmatrix))._22, 0.0f, 0.0f, 937 S(U(fmatrix))._13, S(U(fmatrix))._23, 0.0f, 0.0f); 938 939 res = ID3DXConstantTable_SetMatrix(ctable, device, "r4x4", &fmatrix); 940 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable r4x4: got %#x\n", res); 941 942 IDirect3DDevice9_GetVertexShaderConstantF(device, 15, out, 2); 943 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == S(U(fmatrix))._13 && out[3] == 0.0f 944 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._23 && out[7] == 0.0f, 945 "The variable r2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 946 "should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 947 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 948 S(U(fmatrix))._11, S(U(fmatrix))._12, S(U(fmatrix))._13, 0.0f, 949 S(U(fmatrix))._21, S(U(fmatrix))._22, S(U(fmatrix))._23, 0.0f); 950 951 IDirect3DDevice9_GetVertexShaderConstantF(device, 13, out, 2); 952 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == S(U(fmatrix))._31 && out[3] == 0.0f 953 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._32 && out[7] == 0.0f, 954 "The variable c3x2 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 955 "should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 956 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 957 S(U(fmatrix))._11, S(U(fmatrix))._21, S(U(fmatrix))._31, 0.0f, 958 S(U(fmatrix))._12, S(U(fmatrix))._22, S(U(fmatrix))._32, 0.0f); 959 960 IDirect3DDevice9_GetVertexShaderConstantF(device, 4, out, 3); 961 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == 0.0f && out[3] == 0.0f 962 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == 0.0f && out[7] == 0.0f 963 && out[8] == S(U(fmatrix))._31 && out[9] == S(U(fmatrix))._32 && out[10] == 0.0f && out[11] == 0.0f, 964 "The variable r3x2 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 965 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 966 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], out[8], out[9], out[10], out[11], 967 S(U(fmatrix))._11, S(U(fmatrix))._12, 0.0f, 0.0f, 968 S(U(fmatrix))._21, S(U(fmatrix))._22, 0.0f, 0.0f, 969 S(U(fmatrix))._31, S(U(fmatrix))._32, 0.0f, 0.0f); 970 971 IDirect3DDevice9_GetVertexShaderConstantF(device, 10, out, 3); 972 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == S(U(fmatrix))._31 && out[3] == 0.0f 973 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._32 && out[7] == 0.0f 974 && out[8] == S(U(fmatrix))._13 && out[9] == S(U(fmatrix))._23 && out[10] == S(U(fmatrix))._33 && out[11] == 0.0f, 975 "The variable c3x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 976 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 977 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], out[8], out[9], out[10], out[11], 978 S(U(fmatrix))._11, S(U(fmatrix))._21, S(U(fmatrix))._31, 0.0f, 979 S(U(fmatrix))._12, S(U(fmatrix))._22, S(U(fmatrix))._32, 0.0f, 980 S(U(fmatrix))._13, S(U(fmatrix))._23, S(U(fmatrix))._33, 0.0f); 981 982 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 983 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == S(U(fmatrix))._13 && out[3] == S(U(fmatrix))._14 984 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._23 && out[7] == S(U(fmatrix))._24 985 && out[8] == S(U(fmatrix))._31 && out[9] == S(U(fmatrix))._32 && out[10] == S(U(fmatrix))._33 && out[11] == S(U(fmatrix))._34 986 && out[12] == S(U(fmatrix))._41 && out[13] == S(U(fmatrix))._42 && out[14] == S(U(fmatrix))._43 && out[15] == S(U(fmatrix))._44, 987 "The variable r4x4 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 988 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 989 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 990 out[8], out[9], out[10], out[11], out[12], out[13], out[14], out[15], 991 S(U(fmatrix))._11, S(U(fmatrix))._12, S(U(fmatrix))._13, S(U(fmatrix))._14, 992 S(U(fmatrix))._21, S(U(fmatrix))._22, S(U(fmatrix))._23, S(U(fmatrix))._24, 993 S(U(fmatrix))._31, S(U(fmatrix))._32, S(U(fmatrix))._33, S(U(fmatrix))._34, 994 S(U(fmatrix))._41, S(U(fmatrix))._42, S(U(fmatrix))._43, S(U(fmatrix))._44); 995 996 /* SetMatrixTranspose */ 997 res = ID3DXConstantTable_SetMatrixTranspose(ctable, device, "c2x3", &fmatrix); 998 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTranspose failed on variable c2x3: got %#x\n", res); 999 1000 res = ID3DXConstantTable_SetMatrixTranspose(ctable, device, "r2x3", &fmatrix); 1001 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTranspose failed on variable r2x3: got %#x\n", res); 1002 1003 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 3); 1004 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == 0.0f && out[3] == 0.0f 1005 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == 0.0f && out[7] == 0.0f 1006 && out[8] == S(U(fmatrix))._31 && out[9] == S(U(fmatrix))._32 && out[10] == 0.0f && out[11] == 0.0f, 1007 "The variable c2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 1008 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 1009 out[0], out[1], out[2], out[3], 1010 out[4], out[5], out[6], out[7], 1011 out[8], out[9], out[10], out[11], 1012 S(U(fmatrix))._11, S(U(fmatrix))._12, 0.0f, 0.0f, 1013 S(U(fmatrix))._21, S(U(fmatrix))._22, 0.0f, 0.0f, 1014 S(U(fmatrix))._31, S(U(fmatrix))._32, 0.0f, 0.0f); 1015 1016 IDirect3DDevice9_GetVertexShaderConstantF(device, 15, out, 2); 1017 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == S(U(fmatrix))._31 && out[3] == 0.0f 1018 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._32 && out[7] == 0.0f, 1019 "The variable r2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 1020 "should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 1021 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1022 S(U(fmatrix))._11, S(U(fmatrix))._21, S(U(fmatrix))._31, 0.0f, 1023 S(U(fmatrix))._12, S(U(fmatrix))._22, S(U(fmatrix))._32, 0.0f); 1024 1025 /* SetMatrixPointerArray */ 1026 res = ID3DXConstantTable_SetMatrixPointerArray(ctable, device, "c2x3", matrix_pointer, 1); 1027 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixPointerArray failed on variable c2x3: got %#x\n", res); 1028 1029 res = ID3DXConstantTable_SetMatrixPointerArray(ctable, device, "r2x3", matrix_pointer, 1); 1030 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixPointerArray failed on variable r2x3: got %#x\n", res); 1031 1032 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 3); 1033 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == 0.0f && out[3] == 0.0f 1034 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == 0.0f && out[7] == 0.0f 1035 && out[8] == S(U(fmatrix))._13 && out[9] == S(U(fmatrix))._23 && out[10] == 0.0f && out[11] == 0.0f, 1036 "The variable c2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 1037 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 1038 out[0], out[1], out[2], out[3], 1039 out[4], out[5], out[6], out[7], 1040 out[8], out[9], out[10], out[11], 1041 S(U(fmatrix))._11, S(U(fmatrix))._21, 0.0f, 0.0f, 1042 S(U(fmatrix))._12, S(U(fmatrix))._22, 0.0f, 0.0f, 1043 S(U(fmatrix))._13, S(U(fmatrix))._23, 0.0f, 0.0f); 1044 1045 IDirect3DDevice9_GetVertexShaderConstantF(device, 15, out, 2); 1046 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == S(U(fmatrix))._13 && out[3] == 0.0f 1047 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._23 && out[7] == 0.0f, 1048 "The variable r2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 1049 "should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 1050 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1051 S(U(fmatrix))._11, S(U(fmatrix))._12, S(U(fmatrix))._13, 0.0f, 1052 S(U(fmatrix))._21, S(U(fmatrix))._22, S(U(fmatrix))._23, 0.0f); 1053 1054 /* SetMatrixTransposePointerArray */ 1055 res = ID3DXConstantTable_SetMatrixTransposePointerArray(ctable, device, "c2x3", matrix_pointer, 1); 1056 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTransposePointerArray failed on variable c2x3: got %#x\n", res); 1057 1058 res = ID3DXConstantTable_SetMatrixTransposePointerArray(ctable, device, "r2x3", matrix_pointer, 1); 1059 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixTransposePointerArray failed on variable r2x3: got %#x\n", res); 1060 1061 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 3); 1062 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._12 && out[2] == 0.0f && out[3] == 0.0f 1063 && out[4] == S(U(fmatrix))._21 && out[5] == S(U(fmatrix))._22 && out[6] == 0.0f && out[7] == 0.0f 1064 && out[8] == S(U(fmatrix))._31 && out[9] == S(U(fmatrix))._32 && out[10] == 0.0f && out[11] == 0.0f, 1065 "The variable c2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 1066 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 1067 out[0], out[1], out[2], out[3], 1068 out[4], out[5], out[6], out[7], 1069 out[8], out[9], out[10], out[11], 1070 S(U(fmatrix))._11, S(U(fmatrix))._12, 0.0f, 0.0f, 1071 S(U(fmatrix))._21, S(U(fmatrix))._22, 0.0f, 0.0f, 1072 S(U(fmatrix))._31, S(U(fmatrix))._32, 0.0f, 0.0f); 1073 1074 IDirect3DDevice9_GetVertexShaderConstantF(device, 15, out, 2); 1075 ok(out[0] == S(U(fmatrix))._11 && out[1] == S(U(fmatrix))._21 && out[2] == S(U(fmatrix))._31 && out[3] == 0.0f 1076 && out[4] == S(U(fmatrix))._12 && out[5] == S(U(fmatrix))._22 && out[6] == S(U(fmatrix))._32 && out[7] == 0.0f, 1077 "The variable r2x3 was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f}, " 1078 "should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 1079 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1080 S(U(fmatrix))._11, S(U(fmatrix))._21, S(U(fmatrix))._31, 0.0f, 1081 S(U(fmatrix))._12, S(U(fmatrix))._22, S(U(fmatrix))._32, 0.0f); 1082 1083 ID3DXConstantTable_Release(ctable); 1084 } 1085 1086 static void test_setting_arrays_table(IDirect3DDevice9 *device) 1087 { 1088 static const float farray[8] = { 1089 0.005f, 0.745f, 0.973f, 0.264f, 1090 0.010f, 0.020f, 0.030f, 0.040f}; 1091 static const D3DXMATRIX fmtxarray[2] = { 1092 {{{0.001f, 0.002f, 0.003f, 0.004f, 1093 0.005f, 0.006f, 0.007f, 0.008f, 1094 0.009f, 0.010f, 0.011f, 0.012f, 1095 0.013f, 0.014f, 0.015f, 0.016f}}}, 1096 {{{0.010f, 0.020f, 0.030f, 0.040f, 1097 0.050f, 0.060f, 0.070f, 0.080f, 1098 0.090f, 0.100f, 0.110f, 0.120f, 1099 0.130f, 0.140f, 0.150f, 0.160f}}}}; 1100 static const int iarray[4] = {1, 2, 3, 4}; 1101 static const D3DXVECTOR4 fvecarray[2] = { 1102 {0.745f, 0.997f, 0.353f, 0.237f}, 1103 {0.060f, 0.455f, 0.333f, 0.983f}}; 1104 static BOOL barray[4] = {FALSE, 100, TRUE, TRUE}; 1105 1106 ID3DXConstantTable *ctable; 1107 1108 HRESULT res; 1109 float out[32]; 1110 ULONG refcnt; 1111 1112 /* Clear registers */ 1113 memset(out, 0, sizeof(out)); 1114 IDirect3DDevice9_SetVertexShaderConstantF(device, 8, out, 4); 1115 IDirect3DDevice9_SetVertexShaderConstantF(device, 12, out, 4); 1116 1117 /* Get the constant table from the shader */ 1118 res = D3DXGetShaderConstantTable(ctab_arrays, &ctable); 1119 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got 0x%08x\n", res); 1120 1121 /* Set constants */ 1122 1123 /* Make sure that we cannot set registers that do not belong to this constant */ 1124 res = ID3DXConstantTable_SetFloatArray(ctable, device, "farray", farray, 8); 1125 ok(res == D3D_OK, "ID3DXConstantTable_SetFloatArray failed: got 0x%08x\n", res); 1126 1127 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 8); 1128 ok(out[0] == farray[0] && out[4] == farray[1] && out[8] == farray[2] && out[12] == farray[3], 1129 "The in-bounds elements of the array were not set, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1130 out[0], out[4], out[8], out[12], farray[0], farray[1], farray[2], farray[3]); 1131 ok(out[16] == 0.0f && out[20] == 0.0f && out[24] == 0.0f && out[28] == 0.0f, 1132 "The excess elements of the array were set, out={%f, %f, %f, %f}, should be all 0.0f\n", 1133 out[16], out[20], out[24], out[28]); 1134 1135 /* ivecarray takes up only 1 register, but a matrix takes up 4, so no elements should be set */ 1136 res = ID3DXConstantTable_SetMatrix(ctable, device, "ivecarray", &fmtxarray[0]); 1137 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed: got 0x%08x\n", res); 1138 1139 IDirect3DDevice9_GetVertexShaderConstantF(device, 18, out, 4); 1140 ok(out[0] == 0.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f, 1141 "The array was set, out={%f, %f, %f, %f}, should be all 0.0f\n", out[0], out[1], out[2], out[3]); 1142 1143 /* Try setting an integer array to an array declared as a float array */ 1144 res = ID3DXConstantTable_SetIntArray(ctable, device, "farray", iarray, 4); 1145 ok(res == D3D_OK, "ID3DXConstantTable_SetIntArray failed: got 0x%08x\n", res); 1146 1147 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 4); 1148 ok(out[0] == iarray[0] && out[4] == iarray[1] && out[8] == iarray[2] && out[12] == iarray[3], 1149 "SetIntArray did not properly set a float array: out={%f, %f, %f, %f}, should be {%d, %d, %d, %d}\n", 1150 out[0], out[4], out[8], out[12], iarray[0], iarray[1], iarray[2], iarray[3]); 1151 1152 res = ID3DXConstantTable_SetFloatArray(ctable, device, "farray", farray, 4); 1153 ok(res == D3D_OK, "ID3DXConstantTable_SetFloatArray failed: got x0%08x\n", res); 1154 1155 res = ID3DXConstantTable_SetVectorArray(ctable, device, "fvecarray", fvecarray, 2); 1156 ok(res == D3D_OK, "ID3DXConstantTable_SetVectorArray failed: got 0x%08x\n", res); 1157 1158 res = ID3DXConstantTable_SetMatrixArray(ctable, device, "fmtxarray", fmtxarray, 2); 1159 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrixArray failed: got 0x%08x\n", res); 1160 1161 res = ID3DXConstantTable_SetBoolArray(ctable, device, "barray", barray, 2); 1162 ok(res == D3D_OK, "ID3DXConstantTable_SetBoolArray failed: got 0x%08x\n", res); 1163 1164 /* Read back constants */ 1165 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 4); 1166 ok(out[0] == farray[0] && out[4] == farray[1] && out[8] == farray[2] && out[12] == farray[3], 1167 "The variable farray was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1168 out[0], out[4], out[8], out[12], farray[0], farray[1], farray[2], farray[3]); 1169 1170 IDirect3DDevice9_GetVertexShaderConstantF(device, 12, out, 2); 1171 ok(out[0] == fvecarray[0].x && out[1] == fvecarray[0].y && out[2] == fvecarray[0].z && out[3] == fvecarray[0].w && 1172 out[4] == fvecarray[1].x && out[5] == fvecarray[1].y && out[6] == fvecarray[1].z && out[7] == fvecarray[1].w, 1173 "The variable fvecarray was not set correctly, out={{%f, %f, %f, %f}, {%f, %f, %f, %f}}, should be " 1174 "{{%f, %f, %f, %f}, {%f, %f, %f, %f}}\n", out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1175 fvecarray[0].x, fvecarray[0].y, fvecarray[0].z, fvecarray[0].w, fvecarray[1].x, fvecarray[1].y, 1176 fvecarray[1].z, fvecarray[1].w); 1177 1178 IDirect3DDevice9_GetVertexShaderConstantF(device, 14, out, 2); 1179 ok(out[0] == 0.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f 1180 && out[4] == 1.0f && out[5] == 0.0f && out[6] == 0.0f && out[7] == 0.0f, 1181 "The variable barray was not set correctly, out={%f, %f %f, %f; %f, %f, %f, %f}, should be {%f, %f, %f, %f; %f, %f, %f, %f}\n", 1182 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1183 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f); 1184 1185 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 8); 1186 /* Just check a few elements in each matrix to make sure fmtxarray was set row-major */ 1187 ok(out[0] == S(U(fmtxarray[0]))._11 && out[1] == S(U(fmtxarray[0]))._12 && out[2] == S(U(fmtxarray[0]))._13 && out[3] == S(U(fmtxarray[0]))._14, 1188 "The variable fmtxarray was not set row-major, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1189 out[0], out[1], out[2], out[3], S(U(fmtxarray[0]))._11, S(U(fmtxarray[0]))._12, S(U(fmtxarray[0]))._13, S(U(fmtxarray[0]))._14); 1190 ok(out[16] == S(U(fmtxarray[1]))._11 && out[17] == S(U(fmtxarray[1]))._12 && out[18] == S(U(fmtxarray[1]))._13 && out[19] == S(U(fmtxarray[1]))._14, 1191 "The variable fmtxarray was not set row-major, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1192 out[16], out[17], out[18], out[19], S(U(fmtxarray[1]))._11, S(U(fmtxarray[1]))._12, S(U(fmtxarray[1]))._13, S(U(fmtxarray[1]))._14); 1193 1194 refcnt = ID3DXConstantTable_Release(ctable); 1195 ok(refcnt == 0, "The constant table reference count was %u, should be 0\n", refcnt); 1196 } 1197 1198 static void test_SetDefaults(IDirect3DDevice9 *device) 1199 { 1200 static const D3DXMATRIX mvp = {{{ 1201 0.51f, 0.62f, 0.80f, 0.78f, 1202 0.23f, 0.95f, 0.37f, 0.48f, 1203 0.10f, 0.58f, 0.90f, 0.25f, 1204 0.89f, 0.41f, 0.93f, 0.27f}}}; 1205 static const D3DXVECTOR4 f4 = {0.2f, 0.4f, 0.8f, 1.2f}; 1206 1207 float out[16]; 1208 1209 HRESULT res; 1210 ID3DXConstantTable *ctable; 1211 1212 res = D3DXGetShaderConstantTable(ctab_basic, &ctable); 1213 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1214 1215 res = ID3DXConstantTable_SetVector(ctable, device, "f4", &f4); 1216 ok(res == D3D_OK, "ID3DXConstantTable_SetVector failed: got %08x\n", res); 1217 1218 res = ID3DXConstantTable_SetMatrix(ctable, device, "mvp", &mvp); 1219 ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed: got %08x\n", res); 1220 1221 res = ID3DXConstantTable_SetDefaults(ctable, device); 1222 ok(res == D3D_OK, "ID3dXConstantTable_SetDefaults failed: got %08x\n", res); 1223 1224 /* SetDefaults doesn't change constants without default values */ 1225 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 1226 ok(out[0] == S(U(mvp))._11 && out[4] == S(U(mvp))._12 && out[8] == S(U(mvp))._13 && out[12] == S(U(mvp))._14, 1227 "The first row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1228 out[0], out[4], out[8], out[12], S(U(mvp))._11, S(U(mvp))._12, S(U(mvp))._13, S(U(mvp))._14); 1229 ok(out[1] == S(U(mvp))._21 && out[5] == S(U(mvp))._22 && out[9] == S(U(mvp))._23 && out[13] == S(U(mvp))._24, 1230 "The second row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1231 out[1], out[5], out[9], out[13], S(U(mvp))._21, S(U(mvp))._22, S(U(mvp))._23, S(U(mvp))._24); 1232 ok(out[2] == S(U(mvp))._31 && out[6] == S(U(mvp))._32 && out[10] == S(U(mvp))._33 && out[14] == S(U(mvp))._34, 1233 "The third row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1234 out[2], out[6], out[10], out[14], S(U(mvp))._31, S(U(mvp))._32, S(U(mvp))._33, S(U(mvp))._34); 1235 ok(out[3] == S(U(mvp))._41 && out[7] == S(U(mvp))._42 && out[11] == S(U(mvp))._43 && out[15] == S(U(mvp))._44, 1236 "The fourth row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1237 out[3], out[7], out[11], out[15], S(U(mvp))._41, S(U(mvp))._42, S(U(mvp))._43, S(U(mvp))._44); 1238 1239 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 1240 ok(memcmp(out, &f4, sizeof(f4)) == 0, 1241 "The variable f4 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1242 out[0], out[1], out[2], out[3], f4.x, f4.y, f4.z, f4.w); 1243 1244 ID3DXConstantTable_Release(ctable); 1245 1246 res = D3DXGetShaderConstantTable(ctab_with_default_values, &ctable); 1247 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1248 1249 res = ID3DXConstantTable_SetDefaults(ctable, device); 1250 ok(res == D3D_OK, "ID3DXConstantTable_SetDefaults failed: got %08x\n", res); 1251 1252 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 1253 ok(memcmp(out, mat4_default_value, sizeof(mat4_default_value)) == 0, 1254 "The variable mat4 was not set correctly to default value\n"); 1255 1256 IDirect3DDevice9_GetVertexShaderConstantF(device, 4, out, 4); 1257 ok(memcmp(out, mat3_default_value, sizeof(mat3_default_value)) == 0, 1258 "The variable mat3 was not set correctly to default value\n"); 1259 1260 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 3); 1261 ok(memcmp(out, arr_default_value, sizeof(arr_default_value)) == 0, 1262 "The variable array was not set correctly to default value\n"); 1263 1264 IDirect3DDevice9_GetVertexShaderConstantF(device, 11, out, 1); 1265 ok(memcmp(out, vec4_default_value, sizeof(vec4_default_value)) == 0, 1266 "The variable vec4 was not set correctly to default value\n"); 1267 1268 IDirect3DDevice9_GetVertexShaderConstantF(device, 12, out, 1); 1269 ok(memcmp(out, flt_default_value, sizeof(flt_default_value)) == 0, 1270 "The variable flt was not set correctly to default value\n"); 1271 1272 ID3DXConstantTable_Release(ctable); 1273 } 1274 1275 static void test_SetValue(IDirect3DDevice9 *device) 1276 { 1277 static const D3DXMATRIX mvp = {{{ 1278 0.51f, 0.62f, 0.80f, 0.78f, 1279 0.23f, 0.95f, 0.37f, 0.48f, 1280 0.10f, 0.58f, 0.90f, 0.25f, 1281 0.89f, 0.41f, 0.93f, 0.27f}}}; 1282 static const D3DXVECTOR4 f4 = {0.2f, 0.4f, 0.8f, 1.2f}; 1283 static const FLOAT arr[] = {0.33f, 0.55f, 0.96f, 1.00f, 1284 1.00f, 1.00f, 1.00f, 1.00f, 1285 1.00f, 1.00f, 1.00f, 1.00f}; 1286 static int imatrix[] = {1, 2, 3, 4, 5, 6}; 1287 static float fmatrix[] = {1.1f, 2.2f, 3.3f, 4.4f}; 1288 static BOOL barray[] = {TRUE, FALSE}; 1289 static float fvecarray[] = {9.1f, 9.2f, 9.3f, 9.4f, 9.5f, 9.6f, 9.7f, 9.8f}; 1290 static float farray[] = {2.2f, 3.3f}; 1291 1292 static const float def[16] = {5.5f, 5.5f, 5.5f, 5.5f, 1293 5.5f, 5.5f, 5.5f, 5.5f, 1294 5.5f, 5.5f, 5.5f, 5.5f, 1295 5.5f, 5.5f, 5.5f, 5.5f}; 1296 float out[16]; 1297 1298 HRESULT res; 1299 ID3DXConstantTable *ctable; 1300 1301 res = D3DXGetShaderConstantTable(ctab_basic, &ctable); 1302 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1303 1304 IDirect3DDevice9_SetVertexShaderConstantF(device, 7, def, 1); 1305 1306 /* SetValue called with 0 bytes size doesn't change value */ 1307 res = ID3DXConstantTable_SetValue(ctable, device, "f4", &f4, 0); 1308 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1309 1310 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 1311 ok(memcmp(out, def, sizeof(f4)) == 0, 1312 "The variable f4 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1313 out[0], out[1], out[2], out[3], def[0], def[1], def[2], def[3]); 1314 1315 res = ID3DXConstantTable_SetValue(ctable, device, "f4", &f4, sizeof(f4)); 1316 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1317 1318 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 1); 1319 ok(memcmp(out, &f4, sizeof(f4)) == 0, 1320 "The variable f4 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1321 out[0], out[1], out[2], out[3], f4.x, f4.y, f4.z, f4.w); 1322 1323 IDirect3DDevice9_SetVertexShaderConstantF(device, 0, def, 4); 1324 1325 /* SetValue called with size smaller than constant size doesn't change value */ 1326 res = ID3DXConstantTable_SetValue(ctable, device, "mvp", &mvp, sizeof(mvp) / 2); 1327 ok(res == D3D_OK, "ID3DXConstantTable_SetValue returned %08x\n", res); 1328 1329 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 1330 ok(memcmp(out, def, sizeof(def)) == 0, 1331 "The variable mvp was not set correctly, out={%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 1332 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 1333 out[0], out[4], out[ 8], out[12], 1334 out[1], out[5], out[ 9], out[13], 1335 out[2], out[6], out[10], out[14], 1336 out[3], out[7], out[11], out[15], 1337 def[0], def[4], def[ 8], def[12], 1338 def[1], def[5], def[ 9], def[13], 1339 def[2], def[6], def[10], def[14], 1340 def[3], def[7], def[11], def[15]); 1341 1342 res = ID3DXConstantTable_SetValue(ctable, device, "mvp", &mvp, sizeof(mvp)); 1343 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1344 1345 IDirect3DDevice9_GetVertexShaderConstantF(device, 0, out, 4); 1346 ok(out[0] == S(U(mvp))._11 && out[4] == S(U(mvp))._12 && out[8] == S(U(mvp))._13 && out[12] == S(U(mvp))._14, 1347 "The first row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1348 out[0], out[4], out[8], out[12], S(U(mvp))._11, S(U(mvp))._12, S(U(mvp))._13, S(U(mvp))._14); 1349 ok(out[1] == S(U(mvp))._21 && out[5] == S(U(mvp))._22 && out[9] == S(U(mvp))._23 && out[13] == S(U(mvp))._24, 1350 "The second row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1351 out[1], out[5], out[9], out[13], S(U(mvp))._21, S(U(mvp))._22, S(U(mvp))._23, S(U(mvp))._24); 1352 ok(out[2] == S(U(mvp))._31 && out[6] == S(U(mvp))._32 && out[10] == S(U(mvp))._33 && out[14] == S(U(mvp))._34, 1353 "The third row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1354 out[2], out[6], out[10], out[14], S(U(mvp))._31, S(U(mvp))._32, S(U(mvp))._33, S(U(mvp))._34); 1355 ok(out[3] == S(U(mvp))._41 && out[7] == S(U(mvp))._42 && out[11] == S(U(mvp))._43 && out[15] == S(U(mvp))._44, 1356 "The fourth row of mvp was not set correctly, got {%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1357 out[3], out[7], out[11], out[15], S(U(mvp))._41, S(U(mvp))._42, S(U(mvp))._43, S(U(mvp))._44); 1358 1359 ID3DXConstantTable_Release(ctable); 1360 1361 res = D3DXGetShaderConstantTable(ctab_with_default_values, &ctable); 1362 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1363 1364 res = ID3DXConstantTable_SetValue(ctable, device, "arr", arr, sizeof(arr)); 1365 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1366 1367 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 3); 1368 ok(out[0] == arr[0] && out[4] == arr[1] && out[8] == arr[2] 1369 && out[1] == 0 && out[2] == 0 && out[3] == 0 && out[5] == 0 && out[6] == 0 && out[7] == 0 1370 && out[9] == 0 && out[10] == 0 && out[11] == 0, 1371 "The variable arr was not set correctly, out={%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f}, " 1372 "should be {0.33, 0, 0, 0, 0.55, 0, 0, 0, 0.96, 0, 0, 0}\n", 1373 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], out[8], out[9], out[10], out[11]); 1374 1375 ID3DXConstantTable_Release(ctable); 1376 1377 res = D3DXGetShaderConstantTable(ctab_matrices, &ctable); 1378 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1379 1380 res = ID3DXConstantTable_SetValue(ctable, device, "fmatrix3x1", fmatrix, sizeof(fmatrix)); 1381 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1382 1383 res = ID3DXConstantTable_SetValue(ctable, device, "imatrix2x3", imatrix, sizeof(imatrix)); 1384 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1385 1386 IDirect3DDevice9_GetVertexShaderConstantF(device, 4, out, 2); 1387 ok(out[0] == imatrix[0] && out[1] == imatrix[1] && out[2] == imatrix[2] && out[3] == 0.0f 1388 && out[4] == imatrix[3] && out[5] == imatrix[4] && out[6] == imatrix[5] && out[7] == 0.0f, 1389 "The variable imatrix2x3 was not set correctly, out={%f, %f, %f, %f, %f, %f, %f, %f}, " 1390 "should be {%d, %d, %d, 0, %d, %d, %d, 0}\n", 1391 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1392 imatrix[0], imatrix[1], imatrix[2], imatrix[3], imatrix[4], imatrix[5]); 1393 1394 IDirect3DDevice9_GetVertexShaderConstantF(device, 7, out, 2); 1395 ok(out[0] == fmatrix[0] && out[1] == fmatrix[1] && out[2] == fmatrix[2] && out[3] == 0.0f, 1396 "The variable fmatrix3x1 was not set correctly, out={%f, %f, %f, %f}, should be {%f, %f, %f, %f}\n", 1397 out[0], out[1] ,out[2], out[4], 1398 fmatrix[0], fmatrix[1], fmatrix[2], 0.0f); 1399 1400 ID3DXConstantTable_Release(ctable); 1401 1402 res = D3DXGetShaderConstantTable(ctab_arrays, &ctable); 1403 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed: got %08x\n", res); 1404 1405 res = ID3DXConstantTable_SetValue(ctable, device, "barray", barray, sizeof(barray)); 1406 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1407 1408 res = ID3DXConstantTable_SetValue(ctable, device, "fvecarray", fvecarray, sizeof(fvecarray)); 1409 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1410 1411 IDirect3DDevice9_SetVertexShaderConstantF(device, 8, def, 4); 1412 res = ID3DXConstantTable_SetValue(ctable, device, "farray", farray, sizeof(farray)); 1413 ok(res == D3D_OK, "ID3DXConstantTable_SetValue failed: got %08x\n", res); 1414 1415 /* 2 elements of farray were set */ 1416 IDirect3DDevice9_GetVertexShaderConstantF(device, 8, out, 4); 1417 ok(out[0] == farray[0] && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f 1418 && out[4] == farray[1] && out[5] == 0.0f && out[6] == 0.0f && out[7] == 0.0f 1419 && out[8] == def[8] && out[9] == def[9] && out[10] == def[10] && out[11] == def[11] 1420 && out[12] == def[12] && out[13] == def[13] && out[14] == def[14] && out[15] == def[15], 1421 "The variable farray was not set correctly, should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}, " 1422 "should be {%f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f; %f, %f, %f, %f}\n", 1423 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1424 out[8], out[9], out[10], out[11], out[12], out[13], out[14], out[15], 1425 farray[0], 0.0f, 0.0f, 0.0f, 1426 farray[1], 0.0f, 0.0f, 0.0f, 1427 def[8], def[9], def[10], def[11], 1428 def[12], def[13], def[14], def[15]); 1429 1430 IDirect3DDevice9_GetVertexShaderConstantF(device, 12, out, 2); 1431 ok(out[0] == fvecarray[0] && out[1] == fvecarray[1] && out[2] == fvecarray[2] && out[3] == fvecarray[3] 1432 && out[4] == fvecarray[4] && out[5] == fvecarray[5] && out[6] == fvecarray[6] && out[7] == fvecarray[7], 1433 "The variable fvecarray was not set correctly, out ={%f, %f, %f, %f, %f, %f, %f, %f}, " 1434 "should be {%f, %f, %f, %f, %f, %f, %f, %f}\n", 1435 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1436 fvecarray[0], fvecarray[1], fvecarray[2], fvecarray[3], fvecarray[4], fvecarray[5], fvecarray[6], fvecarray[7]); 1437 1438 IDirect3DDevice9_GetVertexShaderConstantF(device, 14, out, 2); 1439 ok(out[0] == 1.0f && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f 1440 && out[4] == 0.0f && out[5] == 0.0f && out[6] == 0.0f && out[7] == 0.0f, 1441 "The variable barray was not set correctly, out={%f, %f, %f, %f, %f, %f, %f, %f}, " 1442 "should be {%f, %f, %f, %f, %f, %f, %f, %f}\n", 1443 out[0], out[1], out[2], out[3], out[4], out[5], out[6], out[7], 1444 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); 1445 1446 ID3DXConstantTable_Release(ctable); 1447 } 1448 1449 static void test_setting_constants(void) 1450 { 1451 HWND wnd; 1452 IDirect3D9 *d3d; 1453 IDirect3DDevice9 *device; 1454 D3DPRESENT_PARAMETERS d3dpp; 1455 HRESULT hr; 1456 ULONG refcnt; 1457 1458 if (!(wnd = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0, 1459 640, 480, NULL, NULL, NULL, NULL))) 1460 { 1461 skip("Couldn't create application window\n"); 1462 return; 1463 } 1464 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION))) 1465 { 1466 skip("Couldn't create IDirect3D9 object\n"); 1467 DestroyWindow(wnd); 1468 return; 1469 } 1470 1471 ZeroMemory(&d3dpp, sizeof(d3dpp)); 1472 d3dpp.Windowed = TRUE; 1473 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 1474 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device); 1475 if (FAILED(hr)) 1476 { 1477 skip("Failed to create IDirect3DDevice9 object %#x\n", hr); 1478 IDirect3D9_Release(d3d); 1479 DestroyWindow(wnd); 1480 return; 1481 } 1482 1483 test_setting_basic_table(device); 1484 test_setting_matrices_table(device); 1485 test_setting_arrays_table(device); 1486 test_SetDefaults(device); 1487 test_SetValue(device); 1488 1489 /* Release resources */ 1490 refcnt = IDirect3DDevice9_Release(device); 1491 ok(refcnt == 0, "The Direct3D device reference count was %u, should be 0\n", refcnt); 1492 1493 refcnt = IDirect3D9_Release(d3d); 1494 ok(refcnt == 0, "The Direct3D object reference count was %u, should be 0\n", refcnt); 1495 1496 if (wnd) DestroyWindow(wnd); 1497 } 1498 1499 static void test_get_sampler_index(void) 1500 { 1501 ID3DXConstantTable *ctable; 1502 1503 HRESULT res; 1504 UINT index; 1505 1506 ULONG refcnt; 1507 1508 res = D3DXGetShaderConstantTable(ctab_samplers, &ctable); 1509 ok(res == D3D_OK, "D3DXGetShaderConstantTable failed on ctab_samplers: got %08x\n", res); 1510 1511 index = ID3DXConstantTable_GetSamplerIndex(ctable, "sampler1"); 1512 ok(index == 0, "ID3DXConstantTable_GetSamplerIndex returned wrong index: Got %d, expected 0\n", index); 1513 1514 index = ID3DXConstantTable_GetSamplerIndex(ctable, "sampler2"); 1515 ok(index == 3, "ID3DXConstantTable_GetSamplerIndex returned wrong index: Got %d, expected 3\n", index); 1516 1517 index = ID3DXConstantTable_GetSamplerIndex(ctable, "nonexistent"); 1518 ok(index == -1, "ID3DXConstantTable_GetSamplerIndex found nonexistent sampler: Got %d\n", 1519 index); 1520 1521 index = ID3DXConstantTable_GetSamplerIndex(ctable, "notsampler"); 1522 ok(index == -1, "ID3DXConstantTable_GetSamplerIndex succeeded on non-sampler constant: Got %d\n", 1523 index); 1524 1525 refcnt = ID3DXConstantTable_Release(ctable); 1526 ok(refcnt == 0, "The ID3DXConstantTable reference count was %u, should be 0\n", refcnt); 1527 } 1528 1529 /* 1530 * fxc.exe /Tps_3_0 1531 */ 1532 #if 0 1533 sampler s; 1534 sampler1D s1D; 1535 sampler2D s2D; 1536 sampler3D s3D; 1537 samplerCUBE scube; 1538 float4 init; 1539 float4 main(float3 tex : TEXCOORD0) : COLOR 1540 { 1541 float4 tmp = init; 1542 tmp = tmp + tex1D(s1D, tex.x); 1543 tmp = tmp + tex1D(s1D, tex.y); 1544 tmp = tmp + tex3D(s3D, tex.xyz); 1545 tmp = tmp + tex1D(s, tex.x); 1546 tmp = tmp + tex2D(s2D, tex.xy); 1547 tmp = tmp + texCUBE(scube, tex.xyz); 1548 return tmp; 1549 } 1550 #endif 1551 static const DWORD get_shader_samplers_blob[] = 1552 { 1553 0xffff0300, /* ps_3_0 */ 1554 0x0054fffe, FCC_CTAB, /* CTAB comment */ 1555 0x0000001c, 0x0000011b, 0xffff0300, 0x00000006, 0x0000001c, 0x00000100, /* Header */ 1556 0x00000114, 1557 0x00000094, 0x00000002, 0x00000001, 0x0000009c, 0x00000000, /* Constant 1 desc (init) */ 1558 0x000000ac, 0x00040003, 0x00000001, 0x000000b0, 0x00000000, /* Constant 2 desc (s) */ 1559 0x000000c0, 0x00000003, 0x00000001, 0x000000c4, 0x00000000, /* Constant 3 desc (s1D) */ 1560 0x000000d4, 0x00010003, 0x00000001, 0x000000d8, 0x00000000, /* Constant 4 desc (s2D) */ 1561 0x000000e8, 0x00030003, 0x00000001, 0x000000ec, 0x00000000, /* Constant 5 desc (s3D) */ 1562 0x000000fc, 0x00020003, 0x00000001, 0x00000104, 0x00000000, /* Constant 6 desc (scube) */ 1563 0x74696e69, 0xababab00, /* Constant 1 name */ 1564 0x00030001, 0x00040001, 0x00000001, 0x00000000, /* Constant 1 type desc */ 1565 0xabab0073, /* Constant 2 name */ 1566 0x000c0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 2 type desc */ 1567 0x00443173, /* Constant 3 name */ 1568 0x000b0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 3 type desc */ 1569 0x00443273, /* Constant 4 name */ 1570 0x000c0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 4 type desc */ 1571 0x00443373, /* Constant 5 name */ 1572 0x000d0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 5 type desc */ 1573 0x62756373, 0xabab0065, /* Constant 6 name */ 1574 0x000e0004, 0x00010001, 0x00000001, 0x00000000, /* Constant 6 type desc */ 1575 0x335f7370, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, /* Target/Creator name string */ 1576 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 1577 0x332e3235, 0x00313131, 1578 0x0200001f, 0x80000005, 0x90070000, 0x0200001f, 0x90000000, 0xa00f0800, /* shader */ 1579 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f, 0x98000000, 0xa00f0802, 1580 0x0200001f, 0xa0000000, 0xa00f0803, 0x0200001f, 0x90000000, 0xa00f0804, 1581 0x03000042, 0x800f0000, 0x90e40000, 0xa0e40800, 0x03000002, 0x800f0000, 1582 0x80e40000, 0xa0e40000, 0x03000042, 0x800f0001, 0x90550000, 0xa0e40800, 1583 0x03000002, 0x800f0000, 0x80e40000, 0x80e40001, 0x03000042, 0x800f0001, 1584 0x90e40000, 0xa0e40803, 0x03000002, 0x800f0000, 0x80e40000, 0x80e40001, 1585 0x03000042, 0x800f0001, 0x90e40000, 0xa0e40804, 0x03000002, 0x800f0000, 1586 0x80e40000, 0x80e40001, 0x03000042, 0x800f0001, 0x90e40000, 0xa0e40801, 1587 0x03000002, 0x800f0000, 0x80e40000, 0x80e40001, 0x03000042, 0x800f0001, 1588 0x90e40000, 0xa0e40802, 0x03000002, 0x800f0800, 0x80e40000, 0x80e40001, 1589 0x0000ffff, /* END */ 1590 }; 1591 1592 static void test_get_shader_samplers(void) 1593 { 1594 const char *samplers[16] = {NULL}; /* maximum number of sampler registers v/ps 3.0 = 16 */ 1595 const char *sampler_orig; 1596 UINT count = 2; 1597 HRESULT hr; 1598 1599 if (0) 1600 { 1601 /* crashes if bytecode is NULL */ 1602 hr = D3DXGetShaderSamplers(NULL, NULL, &count); 1603 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1604 } 1605 1606 hr = D3DXGetShaderSamplers(get_shader_samplers_blob, NULL, NULL); 1607 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1608 1609 samplers[5] = "dummy"; 1610 1611 hr = D3DXGetShaderSamplers(get_shader_samplers_blob, samplers, NULL); 1612 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1613 1614 /* check that sampler points to shader blob */ 1615 sampler_orig = (const char *)&get_shader_samplers_blob[0x2e]; 1616 ok(sampler_orig == samplers[0], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[0], sampler_orig); 1617 1618 sampler_orig = (const char *)&get_shader_samplers_blob[0x33]; 1619 ok(sampler_orig == samplers[1], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[1], sampler_orig); 1620 1621 sampler_orig = (const char *)&get_shader_samplers_blob[0x38]; 1622 ok(sampler_orig == samplers[2], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[2], sampler_orig); 1623 1624 sampler_orig = (const char *)&get_shader_samplers_blob[0x3d]; 1625 ok(sampler_orig == samplers[3], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[3], sampler_orig); 1626 1627 sampler_orig = (const char *)&get_shader_samplers_blob[0x42]; 1628 ok(sampler_orig == samplers[4], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[4], sampler_orig); 1629 1630 ok(!strcmp(samplers[5], "dummy"), "D3DXGetShaderSamplers failed, got \"%s\", expected \"%s\"\n", samplers[5], "dummy"); 1631 1632 /* reset samplers */ 1633 memset(samplers, 0, sizeof(samplers)); 1634 samplers[5] = "dummy"; 1635 1636 hr = D3DXGetShaderSamplers(get_shader_samplers_blob, NULL, &count); 1637 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1638 ok(count == 5, "D3DXGetShaderSamplers failed, got %u, expected %u\n", count, 5); 1639 1640 hr = D3DXGetShaderSamplers(get_shader_samplers_blob, samplers, &count); 1641 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1642 ok(count == 5, "D3DXGetShaderSamplers failed, got %u, expected %u\n", count, 5); 1643 1644 /* check that sampler points to shader blob */ 1645 sampler_orig = (const char *)&get_shader_samplers_blob[0x2e]; 1646 ok(sampler_orig == samplers[0], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[0], sampler_orig); 1647 1648 sampler_orig = (const char *)&get_shader_samplers_blob[0x33]; 1649 ok(sampler_orig == samplers[1], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[1], sampler_orig); 1650 1651 sampler_orig = (const char *)&get_shader_samplers_blob[0x38]; 1652 ok(sampler_orig == samplers[2], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[2], sampler_orig); 1653 1654 sampler_orig = (const char *)&get_shader_samplers_blob[0x3d]; 1655 ok(sampler_orig == samplers[3], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[3], sampler_orig); 1656 1657 sampler_orig = (const char *)&get_shader_samplers_blob[0x42]; 1658 ok(sampler_orig == samplers[4], "D3DXGetShaderSamplers failed, got %p, expected %p\n", samplers[4], sampler_orig); 1659 1660 ok(!strcmp(samplers[5], "dummy"), "D3DXGetShaderSamplers failed, got \"%s\", expected \"%s\"\n", samplers[5], "dummy"); 1661 1662 /* check without ctab */ 1663 hr = D3DXGetShaderSamplers(simple_vs, samplers, &count); 1664 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1665 ok(count == 0, "D3DXGetShaderSamplers failed, got %u, expected %u\n", count, 0); 1666 1667 /* check invalid ctab */ 1668 hr = D3DXGetShaderSamplers(shader_with_invalid_ctab, samplers, &count); 1669 ok(hr == D3D_OK, "D3DXGetShaderSamplers failed, got %x, expected %x\n", hr, D3D_OK); 1670 ok(count == 0, "D3DXGetShaderSamplers failed, got %u, expected %u\n", count, 0); 1671 } 1672 1673 /* 1674 * fxc.exe /Tvs_3_0 1675 */ 1676 #if 0 1677 float f = {1.1f}, f_2[2] = {2.1f, 2.2f}; 1678 struct {float f; int i;} s = {3.1f, 31}, 1679 s_2[2] = {{4.1f, 41}, {4.2f, 42}}, 1680 s_3[3] = {{5.1f, 51}, {5.2f, 52}, {5.3f, 53}}; 1681 struct {int i1; int i2; float2 f_2; row_major float3x1 r[2];} 1682 p[2] = {{11, 12, {13.1, 14.1}, {{3.11, 3.21, 3.31}, {3.41, 3.51, 3.61}}}, 1683 {15, 16, {17.1, 18.1}, {{4.11, 4.21, 4.31}, {4.41, 4.51, 4.61}}}}; 1684 int i[1] = {6}; 1685 float2x3 f23[2] = {{0.11, 0.21, 0.31, 0.41, 0.51, 0.61}, {0.12, 0.22, 0.32, 0.42, 0.52, 0.62}}; 1686 float3x2 f32[2] = {{1.11, 1.21, 1.31, 1.41, 1.51, 1.61}, {1.12, 1.22, 1.32, 1.42, 1.52, 1.62}}; 1687 float3 v[2] = {{2.11, 2.21, 2.31}, {2.41, 2.51, 2.61}}; 1688 row_major float3x1 r31[2] = {{3.11, 3.21, 3.31}, {3.41, 3.51, 3.61}}; 1689 row_major float1x3 r13[2] = {{4.11, 4.21, 4.31}, {4.41, 4.51, 4.61}}; 1690 float4 main(float4 pos : POSITION) : POSITION 1691 { 1692 float4 tmp = 0.0f; 1693 tmp.zyw = v[1] + r13[1] + r31[1] + p[1].r[1]; 1694 tmp.x += f * f_2[1] * pos.x * p[1].f_2.y; 1695 tmp.y += s.f * pos.y * s_2[0].i; 1696 tmp.z += s_3[0].f * pos.z * s_3[2].f * i[0] * f23[1]._11 * f32[1]._32; 1697 return tmp; 1698 } 1699 #endif 1700 static const DWORD test_get_shader_constant_variables_blob[] = 1701 { 1702 0xfffe0300, 0x0185fffe, 0x42415443, 0x0000001c, 0x000005df, 0xfffe0300, 0x0000000c, 0x0000001c, 1703 0x00000100, 0x000005d8, 0x0000010c, 0x002d0002, 0x00000001, 0x00000110, 0x00000120, 0x00000130, 1704 0x001d0002, 0x00000004, 0x00000134, 0x00000144, 0x000001a4, 0x00210002, 0x00000004, 0x000001a8, 1705 0x000001b8, 0x000001f8, 0x00250002, 0x00000002, 0x000001fc, 0x0000020c, 0x0000022c, 0x002f0002, 1706 0x00000001, 0x00000230, 0x00000240, 0x00000250, 0x00000002, 0x00000012, 0x000002b0, 0x000002c0, 1707 0x000003e0, 0x002b0002, 0x00000002, 0x000003e4, 0x000003f4, 0x00000414, 0x00120002, 0x00000006, 1708 0x00000418, 0x00000428, 0x00000488, 0x002e0002, 0x00000001, 0x000004ac, 0x000004bc, 0x000004dc, 1709 0x00270002, 0x00000002, 0x000004e0, 0x000004f0, 0x00000530, 0x00180002, 0x00000005, 0x00000534, 1710 0x00000544, 0x000005a4, 0x00290002, 0x00000002, 0x000005a8, 0x000005b8, 0xabab0066, 0x00030000, 1711 0x00010001, 0x00000001, 0x00000000, 0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 0x00333266, 1712 0x00030003, 0x00030002, 0x00000002, 0x00000000, 0x3de147ae, 0x3ed1eb85, 0x00000000, 0x00000000, 1713 0x3e570a3d, 0x3f028f5c, 0x00000000, 0x00000000, 0x3e9eb852, 0x3f1c28f6, 0x00000000, 0x00000000, 1714 0x3df5c28f, 0x3ed70a3d, 0x00000000, 0x00000000, 0x3e6147ae, 0x3f051eb8, 0x00000000, 0x00000000, 1715 0x3ea3d70a, 0x3f1eb852, 0x00000000, 0x00000000, 0x00323366, 0x00030003, 0x00020003, 0x00000002, 1716 0x00000000, 0x3f8e147b, 0x3fa7ae14, 0x3fc147ae, 0x00000000, 0x3f9ae148, 0x3fb47ae1, 0x3fce147b, 1717 0x00000000, 0x3f8f5c29, 0x3fa8f5c3, 0x3fc28f5c, 0x00000000, 0x3f9c28f6, 0x3fb5c28f, 0x3fcf5c29, 1718 0x00000000, 0x00325f66, 0x00030000, 0x00010001, 0x00000002, 0x00000000, 0x40066666, 0x00000000, 1719 0x00000000, 0x00000000, 0x400ccccd, 0x00000000, 0x00000000, 0x00000000, 0xabab0069, 0x00020000, 1720 0x00010001, 0x00000001, 0x00000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x31690070, 1721 0xababab00, 0x00020000, 0x00010001, 0x00000001, 0x00000000, 0xab003269, 0x00030001, 0x00020001, 1722 0x00000001, 0x00000000, 0xabab0072, 0x00030002, 0x00010003, 0x00000002, 0x00000000, 0x00000252, 1723 0x00000258, 0x00000268, 0x00000258, 0x000001f8, 0x0000026c, 0x0000027c, 0x00000280, 0x00000005, 1724 0x000a0001, 0x00040002, 0x00000290, 0x41300000, 0x00000000, 0x00000000, 0x00000000, 0x41400000, 1725 0x00000000, 0x00000000, 0x00000000, 0x4151999a, 0x4161999a, 0x00000000, 0x00000000, 0x40470a3d, 1726 0x00000000, 0x00000000, 0x00000000, 0x404d70a4, 0x00000000, 0x00000000, 0x00000000, 0x4053d70a, 1727 0x00000000, 0x00000000, 0x00000000, 0x405a3d71, 0x00000000, 0x00000000, 0x00000000, 0x4060a3d7, 1728 0x00000000, 0x00000000, 0x00000000, 0x40670a3d, 0x00000000, 0x00000000, 0x00000000, 0x41700000, 1729 0x00000000, 0x00000000, 0x00000000, 0x41800000, 0x00000000, 0x00000000, 0x00000000, 0x4188cccd, 1730 0x4190cccd, 0x00000000, 0x00000000, 0x4083851f, 0x00000000, 0x00000000, 0x00000000, 0x4086b852, 1731 0x00000000, 0x00000000, 0x00000000, 0x4089eb85, 0x00000000, 0x00000000, 0x00000000, 0x408d1eb8, 1732 0x00000000, 0x00000000, 0x00000000, 0x409051ec, 0x00000000, 0x00000000, 0x00000000, 0x4093851f, 1733 0x00000000, 0x00000000, 0x00000000, 0x00333172, 0x00030002, 0x00030001, 0x00000002, 0x00000000, 1734 0x4083851f, 0x4086b852, 0x4089eb85, 0x00000000, 0x408d1eb8, 0x409051ec, 0x4093851f, 0x00000000, 1735 0x00313372, 0x00030002, 0x00010003, 0x00000002, 0x00000000, 0x40470a3d, 0x00000000, 0x00000000, 1736 0x00000000, 0x404d70a4, 0x00000000, 0x00000000, 0x00000000, 0x4053d70a, 0x00000000, 0x00000000, 1737 0x00000000, 0x405a3d71, 0x00000000, 0x00000000, 0x00000000, 0x4060a3d7, 0x00000000, 0x00000000, 1738 0x00000000, 0x40670a3d, 0x00000000, 0x00000000, 0x00000000, 0xabab0073, 0x00030000, 0x00010001, 1739 0x00000001, 0x00000000, 0x0000010c, 0x0000048c, 0x0000022c, 0x00000258, 0x00000005, 0x00020001, 1740 0x00020001, 0x0000049c, 0x40466666, 0x00000000, 0x00000000, 0x00000000, 0x41f80000, 0x00000000, 1741 0x00000000, 0x00000000, 0x00325f73, 0x00000005, 0x00020001, 0x00020002, 0x0000049c, 0x40833333, 1742 0x00000000, 0x00000000, 0x00000000, 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x40866666, 1743 0x00000000, 0x00000000, 0x00000000, 0x42280000, 0x00000000, 0x00000000, 0x00000000, 0x00335f73, 1744 0x00000005, 0x00020001, 0x00020003, 0x0000049c, 0x40a33333, 0x00000000, 0x00000000, 0x00000000, 1745 0x424c0000, 0x00000000, 0x00000000, 0x00000000, 0x40a66666, 0x00000000, 0x00000000, 0x00000000, 1746 0x42500000, 0x00000000, 0x00000000, 0x00000000, 0x40a9999a, 0x00000000, 0x00000000, 0x00000000, 1747 0x42540000, 0x00000000, 0x00000000, 0x00000000, 0xabab0076, 0x00030001, 0x00030001, 0x00000002, 1748 0x00000000, 0x40070a3d, 0x400d70a4, 0x4013d70a, 0x00000000, 0x401a3d71, 0x4020a3d7, 0x40270a3d, 1749 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 1750 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0200001f, 1751 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x02000001, 0x80070000, 0xa0e4002a, 1752 0x03000002, 0x80070000, 0x80e40000, 0xa0e4002c, 0x03000002, 0x80040000, 0x80aa0000, 0xa0000017, 1753 0x03000002, 0xe0080000, 0x80aa0000, 0xa0000011, 0x02000001, 0x80010001, 0xa000002d, 0x03000005, 1754 0x80040000, 0x80000001, 0xa0000026, 0x03000005, 0x80040000, 0x80aa0000, 0x90000000, 0x03000005, 1755 0xe0010000, 0x80aa0000, 0xa055000b, 0x03000002, 0x80020000, 0x80550000, 0xa0000016, 0x03000002, 1756 0x80010000, 0x80000000, 0xa0000015, 0x03000002, 0x80010000, 0x80000000, 0xa000000f, 0x03000002, 1757 0x80020000, 0x80550000, 0xa0000010, 0x03000005, 0x80040000, 0xa000002e, 0x90550000, 0x04000004, 1758 0xe0020000, 0x80aa0000, 0xa0000028, 0x80550000, 0x03000005, 0x80020000, 0xa0000018, 0x90aa0000, 1759 0x03000005, 0x80020000, 0x80550000, 0xa000001c, 0x03000005, 0x80020000, 0x80550000, 0xa000002f, 1760 0x03000005, 0x80020000, 0x80550000, 0xa0000020, 0x04000004, 0xe0040000, 0x80550000, 0xa0aa0024, 1761 0x80000000, 0x0000ffff, 1762 }; 1763 1764 const struct 1765 { 1766 const char *fullname; 1767 D3DXCONSTANT_DESC desc; 1768 UINT ctaboffset; 1769 } 1770 test_get_shader_constant_variables_data[] = 1771 { 1772 {"f", {"f", D3DXRS_FLOAT4, 45, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 72}, 1773 {"f23", {"f23", D3DXRS_FLOAT4, 29, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 2, 3, 2, 0, 48, NULL}, 81}, 1774 {"f23[0]", {"f23", D3DXRS_FLOAT4, 29, 3, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 2, 3, 1, 0, 24, NULL}, 81}, 1775 {"f23[1]", {"f23", D3DXRS_FLOAT4, 32, 1, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 2, 3, 1, 0, 24, NULL}, 93}, 1776 {"f32", {"f32", D3DXRS_FLOAT4, 33, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 2, 0, 48, NULL}, 110}, 1777 {"f32[0]", {"f32", D3DXRS_FLOAT4, 33, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 110}, 1778 {"f32[1]", {"f32", D3DXRS_FLOAT4, 35, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 118}, 1779 {"f_2", {"f_2", D3DXRS_FLOAT4, 37, 2, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 2, 0, 8, NULL}, 131}, 1780 {"f_2[0]", {"f_2", D3DXRS_FLOAT4, 37, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 131}, 1781 {"f_2[1]", {"f_2", D3DXRS_FLOAT4, 38, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 135}, 1782 {"i", {"i", D3DXRS_FLOAT4, 47, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 144}, 1783 {"i[0]", {"i", D3DXRS_FLOAT4, 47, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 144}, 1784 {"p", {"p", D3DXRS_FLOAT4, 0, 18, D3DXPC_STRUCT, D3DXPT_VOID, 1, 10, 2, 4, 80, NULL}, 176}, 1785 {"p[0]", {"p", D3DXRS_FLOAT4, 0, 9, D3DXPC_STRUCT, D3DXPT_VOID, 1, 10, 1, 4, 40, NULL}, 176}, 1786 {"p[0].i1", {"i1", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 176}, 1787 {"p[0].i2", {"i2", D3DXRS_FLOAT4, 1, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 180}, 1788 {"p[0].f_2", {"f_2", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 1, 0, 8, NULL}, 184}, 1789 {"p[0].r", {"r", D3DXRS_FLOAT4, 3, 6, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 24, NULL}, 188}, 1790 {"p[0].r[0]", {"r", D3DXRS_FLOAT4, 3, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 188}, 1791 {"p[0].r[1]", {"r", D3DXRS_FLOAT4, 6, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 200}, 1792 {"p[1]", {"p", D3DXRS_FLOAT4, 9, 9, D3DXPC_STRUCT, D3DXPT_VOID, 1, 10, 1, 4, 40, NULL}, 212}, 1793 {"p[1].i1", {"i1", D3DXRS_FLOAT4, 9, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 212}, 1794 {"p[1].i2", {"i2", D3DXRS_FLOAT4, 10, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 216}, 1795 {"p[1].f_2", {"f_2", D3DXRS_FLOAT4, 11, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 1, 0, 8, NULL}, 220}, 1796 {"p[1].r", {"r", D3DXRS_FLOAT4, 12, 6, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 24, NULL}, 224}, 1797 {"p[1].r[0]", {"r", D3DXRS_FLOAT4, 12, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 224}, 1798 {"p[1].r[1]", {"r", D3DXRS_FLOAT4, 15, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 236}, 1799 {"r13", {"r13", D3DXRS_FLOAT4, 43, 2, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 2, 0, 24, NULL}, 253}, 1800 {"r13[0]", {"r13", D3DXRS_FLOAT4, 43, 1, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 253}, 1801 {"r13[1]", {"r13", D3DXRS_FLOAT4, 44, 1, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 257}, 1802 {"r31", {"r31", D3DXRS_FLOAT4, 18, 6, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 24, NULL}, 266}, 1803 {"r31[0]", {"r31", D3DXRS_FLOAT4, 18, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 266}, 1804 {"r31[1]", {"r31", D3DXRS_FLOAT4, 21, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 1, 0, 12, NULL}, 278}, 1805 {"s", {"s", D3DXRS_FLOAT4, 46, 1, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 303}, 1806 {"s.f", {"f", D3DXRS_FLOAT4, 46, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 303}, 1807 {"s.i", {"i", D3DXRS_FLOAT4, 47, 0, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 307}, 1808 {"s_2", {"s_2", D3DXRS_FLOAT4, 39, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 2, 2, 16, NULL}, 316}, 1809 {"s_2[0]", {"s_2", D3DXRS_FLOAT4, 39, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 316}, 1810 {"s_2[0].f", {"f", D3DXRS_FLOAT4, 39, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 316}, 1811 {"s_2[0].i", {"i", D3DXRS_FLOAT4, 40, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 320}, 1812 {"s_2[1]", {"s_2", D3DXRS_FLOAT4, 41, 0, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 324}, 1813 {"s_2[1].f", {"f", D3DXRS_FLOAT4, 41, 0, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 324}, 1814 {"s_2[1].i", {"i", D3DXRS_FLOAT4, 41, 0, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 328}, 1815 {"s_3", {"s_3", D3DXRS_FLOAT4, 24, 5, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 3, 2, 24, NULL}, 337}, 1816 {"s_3[0]", {"s_3", D3DXRS_FLOAT4, 24, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 337}, 1817 {"s_3[0].f", {"f", D3DXRS_FLOAT4, 24, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 337}, 1818 {"s_3[0].i", {"i", D3DXRS_FLOAT4, 25, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 341}, 1819 {"s_3[1]", {"s_3", D3DXRS_FLOAT4, 26, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 345}, 1820 {"s_3[1].f", {"f", D3DXRS_FLOAT4, 26, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 345}, 1821 {"s_3[1].i", {"i", D3DXRS_FLOAT4, 27, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 349}, 1822 {"s_3[2]", {"s_3", D3DXRS_FLOAT4, 28, 1, D3DXPC_STRUCT, D3DXPT_VOID, 1, 2, 1, 2, 8, NULL}, 353}, 1823 {"s_3[2].f", {"f", D3DXRS_FLOAT4, 28, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 353}, 1824 {"s_3[2].i", {"i", D3DXRS_FLOAT4, 29, 0, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 357}, 1825 {"v", {"v", D3DXRS_FLOAT4, 41, 2, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 2, 0, 24, NULL}, 366}, 1826 {"v[0]", {"v", D3DXRS_FLOAT4, 41, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 366}, 1827 {"v[1]", {"v", D3DXRS_FLOAT4, 42, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 370}, 1828 }; 1829 1830 static void test_get_shader_constant_variables(void) 1831 { 1832 ID3DXConstantTable *ctable; 1833 HRESULT hr; 1834 ULONG count; 1835 UINT i; 1836 UINT nr = 1; 1837 D3DXHANDLE constant, element; 1838 D3DXCONSTANT_DESC desc; 1839 DWORD *ctab; 1840 1841 hr = D3DXGetShaderConstantTable(test_get_shader_constant_variables_blob, &ctable); 1842 ok(hr == D3D_OK, "D3DXGetShaderConstantTable failed, got %08x, expected %08x\n", hr, D3D_OK); 1843 1844 ctab = ID3DXConstantTable_GetBufferPointer(ctable); 1845 ok(ctab[0] == test_get_shader_constant_variables_blob[3], "ID3DXConstantTable_GetBufferPointer failed\n"); 1846 1847 for (i = 0; i < ARRAY_SIZE(test_get_shader_constant_variables_data); ++i) 1848 { 1849 const char *fullname = test_get_shader_constant_variables_data[i].fullname; 1850 const D3DXCONSTANT_DESC *expected_desc = &test_get_shader_constant_variables_data[i].desc; 1851 UINT ctaboffset = test_get_shader_constant_variables_data[i].ctaboffset; 1852 1853 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, fullname); 1854 ok(constant != NULL, "GetConstantByName \"%s\" failed\n", fullname); 1855 1856 hr = ID3DXConstantTable_GetConstantDesc(ctable, constant, &desc, &nr); 1857 ok(hr == D3D_OK, "GetConstantDesc \"%s\" failed, got %08x, expected %08x\n", fullname, hr, D3D_OK); 1858 1859 ok(!strcmp(expected_desc->Name, desc.Name), "GetConstantDesc \"%s\" failed, got \"%s\", expected \"%s\"\n", 1860 fullname, desc.Name, expected_desc->Name); 1861 ok(expected_desc->RegisterSet == desc.RegisterSet, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 1862 fullname, desc.RegisterSet, expected_desc->RegisterSet); 1863 ok(expected_desc->RegisterIndex == desc.RegisterIndex, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1864 fullname, desc.RegisterIndex, expected_desc->RegisterIndex); 1865 ok(expected_desc->RegisterCount == desc.RegisterCount, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1866 fullname, desc.RegisterCount, expected_desc->RegisterCount); 1867 ok(expected_desc->Class == desc.Class, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1868 fullname, desc.Class, expected_desc->Class); 1869 ok(expected_desc->Type == desc.Type, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 1870 fullname, desc.Type, expected_desc->Type); 1871 ok(expected_desc->Rows == desc.Rows, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 1872 fullname, desc.Rows, expected_desc->Rows); 1873 ok(expected_desc->Columns == desc.Columns, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1874 fullname, desc.Columns, expected_desc->Columns); 1875 ok(expected_desc->Elements == desc.Elements, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1876 fullname, desc.Elements, expected_desc->Elements); 1877 ok(expected_desc->StructMembers == desc.StructMembers, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1878 fullname, desc.StructMembers, expected_desc->StructMembers); 1879 ok(expected_desc->Bytes == desc.Bytes, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1880 fullname, desc.Bytes, expected_desc->Bytes); 1881 ok(ctaboffset == (DWORD *)desc.DefaultValue - ctab, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 1882 fullname, (UINT)((DWORD *)desc.DefaultValue - ctab), ctaboffset); 1883 } 1884 1885 element = ID3DXConstantTable_GetConstantElement(ctable, NULL, 0); 1886 ok(element == NULL, "GetConstantElement failed\n"); 1887 1888 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "i"); 1889 ok(constant != NULL, "GetConstantByName failed\n"); 1890 1891 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "i[0]"); 1892 ok(constant == element, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1893 1894 element = ID3DXConstantTable_GetConstantElement(ctable, "i", 0); 1895 ok(element == constant, "GetConstantElement failed, got %p, expected %p\n", element, constant); 1896 1897 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f"); 1898 ok(constant != NULL, "GetConstantByName failed\n"); 1899 1900 element = ID3DXConstantTable_GetConstant(ctable, NULL, 0); 1901 ok(element == constant, "GetConstant failed, got %p, expected %p\n", element, constant); 1902 1903 element = ID3DXConstantTable_GetConstant(ctable, "invalid", 0); 1904 ok(element == NULL, "GetConstant failed\n"); 1905 1906 element = ID3DXConstantTable_GetConstant(ctable, "f", 0); 1907 ok(element == NULL, "GetConstant failed\n"); 1908 1909 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f[0]"); 1910 ok(constant == element, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1911 1912 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f[1]"); 1913 ok(NULL == element, "GetConstantByName failed\n"); 1914 1915 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f[0][0]"); 1916 ok(constant == element, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1917 1918 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f."); 1919 ok(element == NULL, "GetConstantByName failed\n"); 1920 1921 element = ID3DXConstantTable_GetConstantElement(ctable, "f", 0); 1922 ok(element == constant, "GetConstantElement failed, got %p, expected %p\n", element, constant); 1923 1924 element = ID3DXConstantTable_GetConstantElement(ctable, "f", 1); 1925 ok(element == NULL, "GetConstantElement failed\n"); 1926 1927 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f_2[0]"); 1928 ok(constant != NULL, "GetConstantByName failed\n"); 1929 1930 element = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f_2"); 1931 ok(element != constant, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1932 1933 element = ID3DXConstantTable_GetConstantElement(ctable, "f_2", 0); 1934 ok(element == constant, "GetConstantElement failed, got %p, expected %p\n", element, constant); 1935 1936 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "f_2[1]"); 1937 ok(constant != NULL, "GetConstantByName failed\n"); 1938 1939 element = ID3DXConstantTable_GetConstantElement(ctable, "f_2", 1); 1940 ok(element == constant, "GetConstantElement failed, got %p, expected %p\n", element, constant); 1941 1942 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "s_2[0].f"); 1943 ok(constant != NULL, "GetConstantByName failed\n"); 1944 1945 element = ID3DXConstantTable_GetConstant(ctable, "s_2[0]", 0); 1946 ok(element == constant, "GetConstant failed, got %p, expected %p\n", element, constant); 1947 1948 element = ID3DXConstantTable_GetConstantByName(ctable, "s_2[0]", "f"); 1949 ok(element == constant, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1950 1951 element = ID3DXConstantTable_GetConstantByName(ctable, "s_2[0]", "invalid"); 1952 ok(element == NULL, "GetConstantByName failed\n"); 1953 1954 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, "s_2[0]"); 1955 ok(constant != NULL, "GetConstantByName failed\n"); 1956 1957 element = ID3DXConstantTable_GetConstantElement(ctable, "s_2[0]", 0); 1958 ok(constant == element, "GetConstantByName failed, got %p, expected %p\n", element, constant); 1959 1960 count = ID3DXConstantTable_Release(ctable); 1961 ok(count == 0, "Release failed, got %u, expected %u\n", count, 0); 1962 } 1963 1964 #define REGISTER_OUTPUT_SIZE 48 1965 1966 enum Type {SetFloat, SetInt, SetBool, SetIntArray, SetBoolArray, SetFloatArray, SetMatrix, 1967 SetMatrixTranspose, SetMatrixArray, SetMatrixTransposeArray, SetVector, SetVectorArray, 1968 SetValue, SetMatrixPointerArray, SetMatrixTransposePointerArray}; 1969 1970 struct registerset_test 1971 { 1972 enum Type type; 1973 UINT in_index; 1974 UINT in_count_min; 1975 UINT in_count_max; 1976 UINT out_count; 1977 DWORD out[REGISTER_OUTPUT_SIZE]; 1978 }; 1979 1980 struct registerset_constants 1981 { 1982 const char *fullname; 1983 D3DXCONSTANT_DESC desc; 1984 UINT ctaboffset; 1985 }; 1986 1987 static const DWORD registerset_test_input[][REGISTER_OUTPUT_SIZE] = 1988 { 1989 /* float */ 1990 {0x40000123, 0x00000000, 0x40800123, 0x40a00123, 1991 0x40c00123, 0x40e00123, 0x41000123, 0x41100123, 1992 0x41200123, 0x41300123, 0x41400123, 0x41500123, 1993 0x41600123, 0x41700123, 0x41800123, 0x41900123, 1994 0x41a00123, 0x41b00123, 0x41c00123, 0x41d00123, 1995 0x00000000, 0x41f00123, 0x42000123, 0x42100123, 1996 0x00000000, 0x42300123, 0x42400123, 0x42500123, 1997 0x42600123, 0x42700123, 0x42800123, 0x42900123, 1998 0x43000123, 0x43100123, 0x43200123, 0x43300123, 1999 0x43400123, 0x43500123, 0x43600123, 0x43700123, 2000 0x43800123, 0x43900123, 0x43a00123, 0x43b00123, 2001 0x43c00123, 0x43d00123, 0x43e00123, 0x43f00123}, 2002 /* int */ 2003 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 2004 0x00000000, 0x00000007, 0x00000008, 0x00000009, 2005 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 2006 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 2007 0x00000012, 0x00000000, 0x00000000, 0x00000015, 2008 0x00000016, 0x00000017, 0x00000018, 0x00000019, 2009 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 2010 0x0000001e, 0x0000001f, 0x00000020, 0x00000021, 2011 0x00000022, 0x00000023, 0x00000024, 0x00000025, 2012 0x00000026, 0x00000027, 0x00000028, 0x00000029, 2013 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 2014 0x0000002e, 0x0000002f, 0x00000030, 0x00000031}, 2015 }; 2016 2017 /* 2018 * fxc.exe /Tvs_3_0 2019 */ 2020 #if 0 2021 bool b = 1; 2022 int n = 8; 2023 float f = 5.1; 2024 int nf = 11; 2025 bool bf = 1; 2026 float4 main(float4 pos : POSITION) : POSITION 2027 { 2028 float4 tmp = 0; 2029 int i; 2030 if (b) for (i = 0; i < n; i++) tmp.x += pos.z * f * nf; 2031 else for (i = 0; i < n; i++) tmp.y += pos.y * f * bf; 2032 return tmp; 2033 } 2034 #endif 2035 static const DWORD registerset_blob_scalar[] = 2036 { 2037 0xfffe0300, 0x0051fffe, 0x42415443, 0x0000001c, 0x0000010f, 0xfffe0300, 0x00000005, 0x0000001c, 2038 0x00000100, 0x00000108, 0x00000080, 0x00000000, 0x00000001, 0x00000084, 0x00000094, 0x00000098, 2039 0x00020002, 0x00000001, 0x00000084, 0x0000009c, 0x000000ac, 0x00000002, 0x00000001, 0x000000b0, 2040 0x000000c0, 0x000000d0, 0x00000001, 0x00000001, 0x000000d4, 0x000000e4, 0x000000f4, 0x00010002, 2041 0x00000001, 0x000000d4, 0x000000f8, 0xabab0062, 0x00010000, 0x00010001, 0x00000001, 0x00000000, 2042 0xffffffff, 0xab006662, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0xabab0066, 0x00030000, 2043 0x00010001, 0x00000001, 0x00000000, 0x40a33333, 0x00000000, 0x00000000, 0x00000000, 0xabab006e, 2044 0x00020000, 0x00010001, 0x00000001, 0x00000000, 0x00000008, 0x00000000, 0x00000001, 0x00000000, 2045 0xab00666e, 0x41300000, 0x00000000, 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 2046 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 2047 0x392e3932, 0x332e3235, 0x00313131, 0x05000051, 0xa00f0003, 0x00000000, 0x00000000, 0x00000000, 2048 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 2049 0xe0e40800, 0x03000005, 0x80010000, 0xa0000000, 0x90aa0000, 0x02000001, 0x80010001, 0xa0000003, 2050 0x01000026, 0xf0e40000, 0x04000004, 0x80010001, 0x80000000, 0xa0000001, 0x80000001, 0x00000027, 2051 0x02000001, 0x80020001, 0xa0000003, 0x0000002a, 0x03000005, 0x80010000, 0xa0000000, 0x90550000, 2052 0x02000001, 0x80020001, 0xa0000003, 0x01000026, 0xf0e40000, 0x04000004, 0x80020001, 0x80000000, 2053 0xa0000002, 0x80550001, 0x00000027, 0x02000001, 0x80010001, 0xa0000003, 0x0000002b, 0x02000001, 2054 0xe0030000, 0x80e40001, 0x02000001, 0xe00c0000, 0xa0000003, 0x0000ffff, 2055 }; 2056 2057 static const struct registerset_constants registerset_constants_scalar_float[] = 2058 { 2059 {"f", {"f", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 48}, 2060 }; 2061 2062 static const struct registerset_test registerset_test_scalar_float[] = 2063 { 2064 {SetFloat, 0, 0, 0, 4, {0x40000123}}, 2065 {SetInt, 1, 0, 0, 4, {0x40000000}}, 2066 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2067 {SetIntArray}, 2068 {SetIntArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x40000000}}, 2069 {SetBoolArray}, 2070 {SetBoolArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x3f800000}}, 2071 {SetFloatArray}, 2072 {SetFloatArray, 0, 1, REGISTER_OUTPUT_SIZE, 4, {0x40000123}}, 2073 {SetValue, 0, 0, 3}, 2074 {SetValue, 0, 4, REGISTER_OUTPUT_SIZE * 4, 4, {0x40000123}}, 2075 {SetVector, 0, 0, 0, 4, {0x40000123}}, 2076 {SetVectorArray}, 2077 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x40000123}}, 2078 {SetMatrix, 0, 0, 0, 4, {0x40000123},}, 2079 {SetMatrixArray}, 2080 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123}}, 2081 {SetMatrixTranspose, 0, 0, 0, 4, {0x40000123},}, 2082 {SetMatrixTransposeArray}, 2083 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123}}, 2084 {SetMatrixPointerArray}, 2085 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123}}, 2086 {SetMatrixTransposePointerArray}, 2087 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123}}, 2088 }; 2089 2090 static const struct registerset_constants registerset_constants_scalar_int[] = 2091 { 2092 {"n", {"n", D3DXRS_INT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 57}, 2093 }; 2094 2095 static const struct registerset_test registerset_test_scalar_int[] = 2096 { 2097 {SetFloat, 0, 0, 0, 4, 2098 {0x00000002, 0x00000000, 0x00000001}}, 2099 {SetInt, 1, 0, 0, 4, 2100 {0x00000002, 0x00000000, 0x00000001}}, 2101 {SetBool, 1, 0, 0, 4, 2102 {0x00000001, 0x00000000, 0x00000001}}, 2103 {SetIntArray}, 2104 {SetIntArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, 2105 {0x00000002, 0x00000000, 0x00000001}}, 2106 {SetBoolArray}, 2107 {SetBoolArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, 2108 {0x00000001, 0x00000000, 0x00000001}}, 2109 {SetFloatArray}, 2110 {SetFloatArray, 0, 1, REGISTER_OUTPUT_SIZE, 4, 2111 {0x00000002, 0x00000000, 0x00000001}}, 2112 {SetValue, 1, 0, 3}, 2113 {SetValue, 1, 4, REGISTER_OUTPUT_SIZE * 4, 4, 2114 {0x00000002, 0x00000000, 0x00000001}}, 2115 {SetVector, 0, 0, 0, 4, 2116 {0x00000002, 0x00000000, 0x00000001},}, 2117 {SetVectorArray}, 2118 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, 2119 {0x00000002, 0x00000000, 0x00000001}}, 2120 {SetMatrix, 0, 0, 0, 4, 2121 {0x00000002, 0x00000000, 0x00000001}}, 2122 {SetMatrixArray}, 2123 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 2124 {0x00000002, 0x00000000, 0x00000001}}, 2125 {SetMatrixTranspose, 0, 0, 0, 4, 2126 {0x00000002, 0x00000000, 0x00000001}}, 2127 {SetMatrixTransposeArray}, 2128 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 2129 {0x00000002, 0x00000000, 0x00000001}}, 2130 {SetMatrixPointerArray}, 2131 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 2132 {0x00000002, 0x00000000, 0x00000001}}, 2133 {SetMatrixTransposePointerArray}, 2134 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 2135 {0x00000002, 0x00000000, 0x00000001}}, 2136 }; 2137 2138 static const struct registerset_constants registerset_constants_scalar_int_float[] = 2139 { 2140 {"nf", {"nf", D3DXRS_FLOAT4, 1, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 62}, 2141 }; 2142 2143 static const struct registerset_test registerset_test_scalar_int_float[] = 2144 { 2145 {SetFloat, 0, 0, 0, 4, {0x40000000}}, 2146 {SetInt, 1, 0, 0, 4, {0x40000000}}, 2147 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2148 {SetIntArray}, 2149 {SetIntArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x40000000}}, 2150 {SetBoolArray}, 2151 {SetBoolArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x3f800000}}, 2152 {SetFloatArray}, 2153 {SetFloatArray, 0, 1, REGISTER_OUTPUT_SIZE, 4, {0x40000000}}, 2154 {SetValue, 1, 0, 3}, 2155 {SetValue, 1, 4, REGISTER_OUTPUT_SIZE * 4, 4, {0x40000000}}, 2156 {SetVector, 0, 0, 0, 4, {0x40000000}}, 2157 {SetVectorArray}, 2158 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x40000000}}, 2159 {SetMatrix, 0, 0, 0, 4, {0x40000000}}, 2160 {SetMatrixArray}, 2161 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000}}, 2162 {SetMatrixTranspose, 0, 0, 0, 4, {0x40000000}}, 2163 {SetMatrixTransposeArray}, 2164 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000}}, 2165 {SetMatrixPointerArray}, 2166 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000}}, 2167 {SetMatrixTransposePointerArray}, 2168 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000}}, 2169 }; 2170 2171 static const struct registerset_constants registerset_constants_scalar_bool_float[] = 2172 { 2173 {"bf", {"bf", D3DXRS_FLOAT4, 2, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 39}, 2174 }; 2175 2176 static const struct registerset_test registerset_test_scalar_bool_float[] = 2177 { 2178 {SetFloat, 0, 0, 0, 4, {0x3f800000}}, 2179 {SetInt, 1, 0, 0, 4, {0x3f800000}}, 2180 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2181 {SetIntArray}, 2182 {SetIntArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x3f800000}}, 2183 {SetBoolArray}, 2184 {SetBoolArray, 1, 1, REGISTER_OUTPUT_SIZE, 4, {0x3f800000}}, 2185 {SetFloatArray}, 2186 {SetFloatArray, 0, 1, REGISTER_OUTPUT_SIZE, 4, {0x3f800000}}, 2187 {SetValue, 1, 0, 3}, 2188 {SetValue, 1, 4, REGISTER_OUTPUT_SIZE * 4, 4, {0x3f800000}}, 2189 {SetVector, 0, 0, 0, 4, {0x3f800000}}, 2190 {SetVectorArray}, 2191 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x3f800000}}, 2192 {SetMatrix, 0, 0, 0, 4, {0x3f800000}}, 2193 {SetMatrixArray}, 2194 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000}}, 2195 {SetMatrixTranspose, 0, 0, 0, 4, {0x3f800000}}, 2196 {SetMatrixTransposeArray}, 2197 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000}}, 2198 {SetMatrixPointerArray}, 2199 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000}}, 2200 {SetMatrixTransposePointerArray}, 2201 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000}}, 2202 }; 2203 2204 static const struct registerset_constants registerset_constants_scalar_bool[] = 2205 { 2206 {"b", {"b", D3DXRS_BOOL, 0, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 37}, 2207 }; 2208 2209 static const struct registerset_test registerset_test_scalar_bool[] = 2210 { 2211 {SetFloat, 0, 0, 0, 1, {0x00000001}}, 2212 {SetInt, 1, 0, 0, 1, {0x00000001}}, 2213 {SetBool, 1, 0, 0, 1, {0x00000002}}, 2214 {SetIntArray}, 2215 {SetIntArray, 1, 1, REGISTER_OUTPUT_SIZE, 1, {0x00000001}}, 2216 {SetBoolArray}, 2217 {SetBoolArray, 1, 1, REGISTER_OUTPUT_SIZE, 1, {0x00000002}}, 2218 {SetFloatArray}, 2219 {SetFloatArray, 0, 1, REGISTER_OUTPUT_SIZE, 1, {0x00000001}}, 2220 {SetValue, 1, 0, 3}, 2221 {SetValue, 1, 4, REGISTER_OUTPUT_SIZE * 4, 1, {0x00000002}}, 2222 {SetVector, 0, 0, 0, 1, {0x00000001}}, 2223 {SetVectorArray}, 2224 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 1, {0x00000001}}, 2225 {SetMatrix, 0, 0, 0, 1, {0x00000001}}, 2226 {SetMatrixArray}, 2227 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 1, {0x00000001}}, 2228 {SetMatrixTranspose, 0, 0, 0, 1, {0x00000001}}, 2229 {SetMatrixTransposeArray}, 2230 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 1, {0x00000001}}, 2231 {SetMatrixPointerArray}, 2232 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 1, {0x00000001}}, 2233 {SetMatrixTransposePointerArray}, 2234 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 1, {0x00000001}}, 2235 }; 2236 2237 /* 2238 * fxc.exe /Tvs_3_0 2239 */ 2240 #if 0 2241 bool ab[2] = {1, 0}; 2242 int an[2] = {32, 33}; 2243 float af[2] = {3.1, 3.2}; 2244 int anf[2] = {14, 15}; 2245 bool abf[2] = {1, 1}; 2246 float4 main(float4 pos : POSITION) : POSITION 2247 { 2248 float4 tmp = 0; 2249 int i; 2250 if (ab[1]) for (i = 0; i < an[1]; i++) tmp.x += pos.z * af[0] * anf[1]; 2251 else for (i = 0; i < an[0]; i++) tmp.y += pos.y * af[1] * abf[1]; 2252 return tmp; 2253 } 2254 #endif 2255 static const DWORD registerset_blob_scalar_array[] = 2256 { 2257 0xfffe0300, 0x006afffe, 0x42415443, 0x0000001c, 0x00000173, 0xfffe0300, 0x00000005, 0x0000001c, 2258 0x00000100, 0x0000016c, 0x00000080, 0x00000000, 0x00000002, 0x00000084, 0x00000094, 0x0000009c, 2259 0x00040002, 0x00000002, 0x000000a0, 0x000000b0, 0x000000d0, 0x00000002, 0x00000002, 0x000000d4, 2260 0x000000e4, 0x00000104, 0x00000001, 0x00000002, 0x00000108, 0x00000118, 0x00000138, 0x00020002, 2261 0x00000002, 0x0000013c, 0x0000014c, 0xab006261, 0x00010000, 0x00010001, 0x00000002, 0x00000000, 2262 0xffffffff, 0x00000000, 0x00666261, 0x00010000, 0x00010001, 0x00000002, 0x00000000, 0x3f800000, 2263 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0xab006661, 2264 0x00030000, 0x00010001, 0x00000002, 0x00000000, 0x40466666, 0x00000000, 0x00000000, 0x00000000, 2265 0x404ccccd, 0x00000000, 0x00000000, 0x00000000, 0xab006e61, 0x00020000, 0x00010001, 0x00000002, 2266 0x00000000, 0x00000020, 0x00000000, 0x00000001, 0x00000000, 0x00000021, 0x00000000, 0x00000001, 2267 0x00000000, 0x00666e61, 0x00020000, 0x00010001, 0x00000002, 0x00000000, 0x41600000, 0x00000000, 2268 0x00000000, 0x00000000, 0x41700000, 0x00000000, 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 2269 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 2270 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x05000051, 0xa00f0006, 0x00000000, 0x00000000, 2271 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 2272 0x01000028, 0xe0e40801, 0x03000005, 0x80010000, 0xa0000000, 0x90aa0000, 0x02000001, 0x80010001, 2273 0xa0000006, 0x01000026, 0xf0e40001, 0x04000004, 0x80010001, 0x80000000, 0xa0000003, 0x80000001, 2274 0x00000027, 0x02000001, 0x80020001, 0xa0000006, 0x0000002a, 0x03000005, 0x80010000, 0xa0000001, 2275 0x90550000, 0x02000001, 0x80020001, 0xa0000006, 0x01000026, 0xf0e40000, 0x04000004, 0x80020001, 2276 0x80000000, 0xa0000005, 0x80550001, 0x00000027, 0x02000001, 0x80010001, 0xa0000006, 0x0000002b, 2277 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 0xe00c0000, 0xa0000006, 0x0000ffff, 2278 }; 2279 2280 static const struct registerset_constants registerset_constants_scalar_array_float[] = 2281 { 2282 {"af", {"af", D3DXRS_FLOAT4, 0, 2, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 2, 0, 8, NULL}, 57}, 2283 {"af[0]", {"af", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 57}, 2284 {"af[1]", {"af", D3DXRS_FLOAT4, 1, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 61}, 2285 }; 2286 2287 static const struct registerset_test registerset_test_scalar_array_float[] = 2288 { 2289 {SetFloat, 0, 0, 0, 4, {0x40000123}}, 2290 {SetInt, 1, 0, 0, 4, {0x40000000}}, 2291 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2292 {SetIntArray}, 2293 {SetIntArray, 1, 1, 1, 4, {0x40000000}}, 2294 {SetIntArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2295 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000}}, 2296 {SetBoolArray}, 2297 {SetBoolArray, 1, 1, 1, 4, {0x3f800000}}, 2298 {SetBoolArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2299 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2300 {SetFloatArray}, 2301 {SetFloatArray, 0, 1, 1, 4, {0x40000123}}, 2302 {SetFloatArray, 0, 2, REGISTER_OUTPUT_SIZE, 8, 2303 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2304 {SetValue, 0, 0, 3}, 2305 {SetValue, 0, 4, 7, 4, {0x40000123}}, 2306 {SetValue, 0, 8, REGISTER_OUTPUT_SIZE * 4, 8, 2307 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2308 {SetVector, 0, 0, 0, 8, 2309 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2310 {SetVectorArray}, 2311 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 2312 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2313 {SetMatrix, 0, 0, 0, 8, 2314 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2315 {SetMatrixArray}, 2316 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2317 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2318 {SetMatrixTranspose, 0, 0, 0, 8, 2319 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123}}, 2320 {SetMatrixTransposeArray}, 2321 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2322 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123}}, 2323 {SetMatrixPointerArray}, 2324 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2325 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2326 {SetMatrixTransposePointerArray}, 2327 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2328 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123}}, 2329 }; 2330 2331 static const struct registerset_constants registerset_constants_scalar_array_int[] = 2332 { 2333 {"an", {"an", D3DXRS_INT4, 0, 2, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 2, 0, 8, NULL}, 70}, 2334 {"an[0]", {"an", D3DXRS_INT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 70}, 2335 {"an[1]", {"an", D3DXRS_INT4, 1, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 74}, 2336 }; 2337 2338 static const struct registerset_test registerset_test_scalar_array_int[] = 2339 { 2340 {SetFloat, 0, 0, 0, 4, {0x00000002, 0x00000000, 0x00000001}}, 2341 {SetInt, 1, 0, 0, 4, {0x00000002, 0x00000000, 0x00000001}}, 2342 {SetBool, 1, 0, 0, 4, {0x00000001, 0x00000000, 0x00000001}}, 2343 {SetIntArray}, 2344 {SetIntArray, 1, 1, 1, 4, {0x00000002, 0x00000000, 0x00000001}}, 2345 {SetIntArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2346 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000000, 0x00000001}}, 2347 {SetBoolArray}, 2348 {SetBoolArray, 1, 1, 1, 4, {0x00000001, 0x00000000, 0x00000001}}, 2349 {SetBoolArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2350 {0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001}}, 2351 {SetFloatArray}, 2352 {SetFloatArray, 0, 1, 1, 4, {0x00000002, 0x00000000, 0x00000001}}, 2353 {SetFloatArray, 0, 2, REGISTER_OUTPUT_SIZE, 8, 2354 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2355 {SetValue, 1, 0, 3}, 2356 {SetValue, 1, 4, 7, 4, {0x00000002, 0x00000000, 0x00000001}}, 2357 {SetValue, 1, 8, REGISTER_OUTPUT_SIZE * 4, 8, 2358 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000000, 0x00000001}}, 2359 {SetVector, 0, 0, 0, 8, 2360 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2361 {SetVectorArray}, 2362 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 2363 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2364 {SetMatrix, 0, 0, 0, 8, 2365 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2366 {SetMatrixArray}, 2367 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2368 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2369 {SetMatrixTranspose, 0, 0, 0, 8, 2370 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000000, 0x00000001}}, 2371 {SetMatrixTransposeArray}, 2372 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2373 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000000, 0x00000001}}, 2374 {SetMatrixPointerArray}, 2375 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2376 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 2377 {SetMatrixTransposePointerArray}, 2378 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2379 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000000, 0x00000001}}, 2380 }; 2381 2382 static const struct registerset_constants registerset_constants_scalar_array_bool[] = 2383 { 2384 {"ab", {"ab", D3DXRS_BOOL, 0, 2, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 2, 0, 8, NULL}, 37}, 2385 {"ab[0]", {"ab", D3DXRS_BOOL, 0, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 37}, 2386 {"ab[1]", {"ab", D3DXRS_BOOL, 1, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 38}, 2387 }; 2388 2389 static const struct registerset_test registerset_test_scalar_array_bool[] = 2390 { 2391 {SetFloat, 0, 0, 0, 1, {0x00000001}}, 2392 {SetInt, 1, 0, 0, 1, {0x00000001}}, 2393 {SetBool, 1, 0, 0, 1, {0x00000002}}, 2394 {SetIntArray}, 2395 {SetIntArray, 1, 1, 1, 1, {0x00000001}}, 2396 {SetIntArray, 1, 2, REGISTER_OUTPUT_SIZE, 2, {0x00000001, 0x00000001}}, 2397 {SetBoolArray}, 2398 {SetBoolArray, 1, 1, 1, 1, {0x00000002}}, 2399 {SetBoolArray, 1, 2, REGISTER_OUTPUT_SIZE, 2, {0x00000002, 0x00000003}}, 2400 {SetFloatArray}, 2401 {SetFloatArray, 0, 1, 1, 1, {0x00000001}}, 2402 {SetFloatArray, 0, 2, REGISTER_OUTPUT_SIZE, 2, {0x00000001, 0x00000000}}, 2403 {SetValue, 1, 0, 3}, 2404 {SetValue, 1, 4, 7, 1, {0x00000002}}, 2405 {SetValue, 1, 8, REGISTER_OUTPUT_SIZE * 4, 2, {0x00000002, 0x00000003}}, 2406 {SetVector, 0, 0, 0, 2, {0x00000001, 0x00000000}}, 2407 {SetVectorArray}, 2408 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 2, {0x00000001, 0x00000000}}, 2409 {SetMatrix, 0, 0, 0, 2, {0x00000001, 0x00000000}}, 2410 {SetMatrixArray}, 2411 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 2, {0x00000001, 0x00000000}}, 2412 {SetMatrixTranspose, 0, 0, 0, 2, {0x00000001, 0x00000001}}, 2413 {SetMatrixTransposeArray}, 2414 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 2, {0x00000001, 0x00000001}}, 2415 {SetMatrixPointerArray}, 2416 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 2, {0x00000001, 0x00000000}}, 2417 {SetMatrixTransposePointerArray}, 2418 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 2, {0x00000001, 0x00000001}}, 2419 }; 2420 2421 static const struct registerset_constants registerset_constants_scalar_array_bool_float[] = 2422 { 2423 {"abf", {"abf", D3DXRS_FLOAT4, 4, 2, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 2, 0, 8, NULL}, 44}, 2424 {"abf[0]", {"abf", D3DXRS_FLOAT4, 4, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 44}, 2425 {"abf[1]", {"abf", D3DXRS_FLOAT4, 5, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 48}, 2426 }; 2427 2428 static const struct registerset_test registerset_test_scalar_array_bool_float[] = 2429 { 2430 {SetFloat, 0, 0, 0, 4, {0x3f800000}}, 2431 {SetInt, 1, 0, 0, 4, {0x3f800000}}, 2432 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2433 {SetIntArray}, 2434 {SetIntArray, 1, 1, 1, 4, {0x3f800000}}, 2435 {SetIntArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2436 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2437 {SetBoolArray}, 2438 {SetBoolArray, 1, 1, 1, 4, {0x3f800000}}, 2439 {SetBoolArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2440 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2441 {SetFloatArray}, 2442 {SetFloatArray, 0, 1, 1, 4, {0x3f800000}}, 2443 {SetFloatArray, 0, 2, REGISTER_OUTPUT_SIZE, 8, 2444 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2445 {SetValue, 1, 0, 3}, 2446 {SetValue, 1, 4, 7, 4, {0x3f800000}}, 2447 {SetValue, 1, 8, REGISTER_OUTPUT_SIZE * 4, 8, 2448 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2449 {SetVector, 0, 0, 0, 8, 2450 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2451 {SetVectorArray}, 2452 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 2453 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2454 {SetMatrix, 0, 0, 0, 8, 2455 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2456 {SetVectorArray}, 2457 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2458 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2459 {SetMatrixTranspose, 0, 0, 0, 8, 2460 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2461 {SetMatrixTransposeArray}, 2462 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2463 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2464 {SetMatrixPointerArray}, 2465 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2466 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2467 {SetMatrixTransposePointerArray}, 2468 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2469 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2470 }; 2471 2472 static const struct registerset_constants registerset_constants_scalar_array_int_float[] = 2473 { 2474 {"anf", {"anf", D3DXRS_FLOAT4, 2, 2, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 2, 0, 8, NULL}, 83}, 2475 {"anf[0]", {"anf", D3DXRS_FLOAT4, 2, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 83}, 2476 {"anf[1]", {"anf", D3DXRS_FLOAT4, 3, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 87}, 2477 }; 2478 2479 static const struct registerset_test registerset_test_scalar_array_int_float[] = 2480 { 2481 {SetFloat, 0, 0, 0, 4, {0x40000000}}, 2482 {SetInt, 1, 0, 0, 4, {0x40000000}}, 2483 {SetBool, 1, 0, 0, 4, {0x3f800000}}, 2484 {SetIntArray}, 2485 {SetIntArray, 1, 1, 1, 4, {0x40000000}}, 2486 {SetIntArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2487 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000}}, 2488 {SetBoolArray}, 2489 {SetBoolArray, 1, 1, 1, 4, {0x3f800000}}, 2490 {SetBoolArray, 1, 2, REGISTER_OUTPUT_SIZE, 8, 2491 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 2492 {SetFloatArray}, 2493 {SetFloatArray, 0, 1, 1, 4, {0x40000000}}, 2494 {SetFloatArray, 0, 2, REGISTER_OUTPUT_SIZE, 8, 2495 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2496 {SetValue, 1, 0, 3}, 2497 {SetValue, 1, 4, 7, 4, {0x40000000}}, 2498 {SetValue, 1, 8, REGISTER_OUTPUT_SIZE * 4, 8, 2499 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000}}, 2500 {SetVector, 0, 0, 0, 8, 2501 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2502 {SetVectorArray}, 2503 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 2504 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2505 {SetMatrix, 0, 0, 0, 8, 2506 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2507 {SetMatrixArray}, 2508 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2509 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2510 {SetMatrixTranspose, 0, 0, 0, 8, 2511 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000}}, 2512 {SetMatrixTransposeArray}, 2513 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2514 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000}}, 2515 {SetMatrixPointerArray}, 2516 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2517 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 2518 {SetMatrixTransposePointerArray}, 2519 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2520 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000}}, 2521 }; 2522 2523 /* 2524 * fxc.exe /Tvs_3_0 2525 */ 2526 #if 0 2527 bool3 vb = {1, 0, 1}; 2528 int3 vn = {7, 8, 9}; 2529 float3 vf = {5.1, 5.2, 5.3}; 2530 int3 vnf = {11, 85, 62}; 2531 bool3 vbf = {1, 1, 1}; 2532 float4 main(float4 pos : POSITION) : POSITION 2533 { 2534 float4 tmp = 0; 2535 int i; 2536 if (vb.z) for (i = 0; i < vn.z; i++) tmp.x += pos.z * vf.z * vnf.z; 2537 else for (i = 0; i < vn.y; i++) tmp.y += pos.y * vf.y * vbf.z; 2538 return tmp; 2539 } 2540 #endif 2541 static const DWORD registerset_blob_vector[] = 2542 { 2543 0xfffe0300, 0x0053fffe, 0x42415443, 0x0000001c, 0x00000117, 0xfffe0300, 0x00000005, 0x0000001c, 2544 0x00000100, 0x00000110, 0x00000080, 0x00000000, 0x00000003, 0x00000084, 0x00000094, 0x000000a0, 2545 0x00020002, 0x00000001, 0x00000084, 0x000000a4, 0x000000b4, 0x00000002, 0x00000001, 0x000000b8, 2546 0x000000c8, 0x000000d8, 0x00000001, 0x00000003, 0x000000dc, 0x000000ec, 0x000000fc, 0x00010002, 2547 0x00000001, 0x000000dc, 0x00000100, 0xab006276, 0x00010001, 0x00030001, 0x00000001, 0x00000000, 2548 0xffffffff, 0x00000000, 0xffffffff, 0x00666276, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 2549 0xab006676, 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0x40a33333, 0x40a66666, 0x40a9999a, 2550 0x00000000, 0xab006e76, 0x00020001, 0x00030001, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 2551 0x00000009, 0x00000000, 0x00666e76, 0x41300000, 0x42aa0000, 0x42780000, 0x00000000, 0x335f7376, 2552 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 2553 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x05000051, 0xa00f0003, 0x00000000, 2554 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 2555 0xe00f0000, 0x01000028, 0xe0e40802, 0x03000005, 0x80010000, 0xa0aa0000, 0x90aa0000, 0x02000001, 2556 0x80010001, 0xa0000003, 0x01000026, 0xf0e40002, 0x04000004, 0x80010001, 0x80000000, 0xa0aa0001, 2557 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa0000003, 0x0000002a, 0x03000005, 0x80010000, 2558 0xa0550000, 0x90550000, 0x02000001, 0x80020001, 0xa0000003, 0x01000026, 0xf0e40001, 0x04000004, 2559 0x80020001, 0x80000000, 0xa0aa0002, 0x80550001, 0x00000027, 0x02000001, 0x80010001, 0xa0000003, 2560 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 0xe00c0000, 0xa0000003, 0x0000ffff, 2561 }; 2562 2563 static const struct registerset_constants registerset_constants_vector_float[] = 2564 { 2565 {"vf", {"vf", D3DXRS_FLOAT4, 0, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 50}, 2566 }; 2567 2568 static const struct registerset_test registerset_test_vector_float[] = 2569 { 2570 {SetInt}, 2571 {SetBool}, 2572 {SetFloat}, 2573 {SetIntArray, 1, 0, 2}, 2574 {SetIntArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x40000000, 0x40400000, 0x40800000}}, 2575 {SetBoolArray, 1, 0, 2}, 2576 {SetBoolArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2577 {SetFloatArray, 0, 0, 2}, 2578 {SetFloatArray, 0, 3, REGISTER_OUTPUT_SIZE, 4, {0x40000123, 0x00000000, 0x40800123}}, 2579 {SetValue, 0, 0, 11}, 2580 {SetValue, 0, 12, REGISTER_OUTPUT_SIZE * 4, 4, {0x40000123, 0x00000000, 0x40800123}}, 2581 {SetVector, 0, 0, 0, 4, {0x40000123, 0x00000000, 0x40800123}}, 2582 {SetVectorArray}, 2583 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x40000123, 0x00000000, 0x40800123}}, 2584 {SetMatrix, 0, 0, 0, 4, {0x40000123, 0x00000000, 0x40800123}}, 2585 {SetMatrixArray}, 2586 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123, 0x00000000, 0x40800123}}, 2587 {SetMatrixTranspose, 0, 0, 0, 4, {0x40000123, 0x40c00123, 0x41200123}}, 2588 {SetMatrixTransposeArray}, 2589 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123, 0x40c00123, 0x41200123}}, 2590 {SetMatrixPointerArray}, 2591 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123, 0x00000000, 0x40800123}}, 2592 {SetMatrixTransposePointerArray}, 2593 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000123, 0x40c00123, 0x41200123}}, 2594 }; 2595 2596 static const struct registerset_constants registerset_constants_vector_int[] = 2597 { 2598 {"vn", {"vn", D3DXRS_INT4, 0, 3, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 59}, 2599 }; 2600 2601 static const struct registerset_test registerset_test_vector_int[] = 2602 { 2603 {SetInt}, 2604 {SetBool}, 2605 {SetFloat}, 2606 {SetIntArray, 1, 0, 2}, 2607 {SetIntArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x00000002, 0x00000003, 0x00000004}}, 2608 {SetBoolArray, 1, 0, 2}, 2609 {SetBoolArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x00000001, 0x00000001, 0x00000001}}, 2610 {SetFloatArray, 0, 0, 2}, 2611 {SetFloatArray, 0, 3, REGISTER_OUTPUT_SIZE, 4, {0x00000002, 0x00000000, 0x00000004}}, 2612 {SetValue, 1, 0, 11}, 2613 {SetValue, 1, 12, REGISTER_OUTPUT_SIZE * 4, 4, {0x00000002, 0x00000003, 0x00000004}}, 2614 {SetVector, 0, 0, 0, 4, {0x00000002, 0x00000000, 0x00000004}}, 2615 {SetVectorArray}, 2616 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x00000002, 0x00000000, 0x00000004}}, 2617 {SetMatrix, 0, 0, 0, 4, {0x00000002, 0x00000000, 0x00000004}}, 2618 {SetMatrixArray}, 2619 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x00000002, 0x00000000, 0x00000004}}, 2620 {SetMatrixTranspose, 0, 0, 0, 4, {0x00000002, 0x00000006, 0x0000000a}}, 2621 {SetMatrixTransposeArray}, 2622 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x00000002, 0x00000006, 0x0000000a}}, 2623 {SetMatrixPointerArray}, 2624 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x00000002, 0x00000000, 0x00000004}}, 2625 {SetMatrixTransposePointerArray}, 2626 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x00000002, 0x00000006, 0x0000000a}}, 2627 }; 2628 2629 static const struct registerset_constants registerset_constants_vector_bool[] = 2630 { 2631 {"vb", {"vb", D3DXRS_BOOL, 0, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 37}, 2632 }; 2633 2634 static const struct registerset_test registerset_test_vector_bool[] = 2635 { 2636 {SetInt}, 2637 {SetBool}, 2638 {SetFloat}, 2639 {SetIntArray, 1, 0, 2}, 2640 {SetIntArray, 1, 3, REGISTER_OUTPUT_SIZE, 3, {0x00000001, 0x00000001, 0x00000001}}, 2641 {SetBoolArray, 1, 0, 2}, 2642 {SetBoolArray, 1, 3, REGISTER_OUTPUT_SIZE, 3, {0x00000002, 0x00000003, 0x00000004}}, 2643 {SetFloatArray, 0, 0, 2}, 2644 {SetFloatArray, 0, 3, REGISTER_OUTPUT_SIZE, 3, {0x00000001, 0x00000000, 0x00000001}}, 2645 {SetValue, 1, 0, 11}, 2646 {SetValue, 1, 12, REGISTER_OUTPUT_SIZE * 4, 3, {0x00000002, 0x00000003, 0x00000004}}, 2647 {SetVector, 0, 0, 0, 3, {0x00000001, 0x00000000, 0x00000001}}, 2648 {SetVectorArray}, 2649 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 3, {0x00000001, 0x00000000, 0x00000001}}, 2650 {SetMatrix, 0, 0, 0, 3, {0x00000001, 0x00000000, 0x00000001}}, 2651 {SetMatrixArray}, 2652 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 3, {0x00000001, 0x00000000, 0x00000001}}, 2653 {SetMatrixTranspose, 0, 0, 0, 3, {0x00000001, 0x00000001, 0x00000001}}, 2654 {SetMatrixTransposeArray}, 2655 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 3, {0x00000001, 0x00000001, 0x00000001}}, 2656 {SetMatrixPointerArray}, 2657 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 3, {0x00000001, 0x00000000, 0x00000001}}, 2658 {SetMatrixTransposePointerArray}, 2659 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 3, {0x00000001, 0x00000001, 0x00000001}}, 2660 }; 2661 2662 static const struct registerset_constants registerset_constants_vector_bool_float[] = 2663 { 2664 {"vbf", {"vbf", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 41}, 2665 }; 2666 2667 static const struct registerset_test registerset_test_vector_bool_float[] = 2668 { 2669 {SetInt}, 2670 {SetBool}, 2671 {SetFloat}, 2672 {SetIntArray, 1, 0, 2}, 2673 {SetIntArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2674 {SetBoolArray, 1, 0, 2}, 2675 {SetBoolArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2676 {SetFloatArray, 0, 0, 2}, 2677 {SetFloatArray, 0, 3, REGISTER_OUTPUT_SIZE, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2678 {SetValue, 1, 0, 11}, 2679 {SetValue, 1, 12, REGISTER_OUTPUT_SIZE * 4, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2680 {SetVector, 0, 0, 0, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2681 {SetVectorArray}, 2682 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2683 {SetMatrix, 0, 0, 0, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2684 {SetMatrixArray}, 2685 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2686 {SetMatrixTranspose, 0, 0, 0, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2687 {SetMatrixTransposeArray}, 2688 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2689 {SetMatrixPointerArray}, 2690 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2691 {SetMatrixTransposePointerArray}, 2692 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2693 }; 2694 2695 static const struct registerset_constants registerset_constants_vector_int_float[] = 2696 { 2697 {"vnf", {"vnf", D3DXRS_FLOAT4, 1, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 64}, 2698 }; 2699 2700 static const struct registerset_test registerset_test_vector_int_float[] = 2701 { 2702 {SetInt}, 2703 {SetBool}, 2704 {SetFloat}, 2705 {SetIntArray, 1, 0, 2}, 2706 {SetIntArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x40000000, 0x40400000, 0x40800000}}, 2707 {SetBoolArray, 1, 0, 2}, 2708 {SetBoolArray, 1, 3, REGISTER_OUTPUT_SIZE, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2709 {SetFloatArray, 0, 0, 2}, 2710 {SetFloatArray, 0, 3, REGISTER_OUTPUT_SIZE, 4, {0x40000000, 0x00000000, 0x40800000}}, 2711 {SetValue, 1, 0, 11}, 2712 {SetValue, 1, 12, REGISTER_OUTPUT_SIZE * 4, 4, {0x40000000, 0x40400000, 0x40800000}}, 2713 {SetVector, 0, 0, 0, 4, {0x40000000, 0x00000000, 0x40800000}}, 2714 {SetVectorArray}, 2715 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, {0x40000000, 0x00000000, 0x40800000}}, 2716 {SetMatrix, 0, 0, 0, 4, {0x40000000, 0x00000000, 0x40800000}}, 2717 {SetMatrixArray}, 2718 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000, 0x00000000, 0x40800000}}, 2719 {SetMatrixTranspose, 0, 0, 0, 4, {0x40000000, 0x40c00000, 0x41200000}}, 2720 {SetMatrixTransposeArray}, 2721 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000, 0x40c00000, 0x41200000}}, 2722 {SetMatrixPointerArray}, 2723 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000, 0x00000000, 0x40800000}}, 2724 {SetMatrixTransposePointerArray}, 2725 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, {0x40000000, 0x40c00000, 0x41200000}}, 2726 }; 2727 2728 /* 2729 * fxc.exe /Tvs_3_0 2730 */ 2731 #if 0 2732 bool3 vab[2] = {1, 0, 1, 1, 0, 1}; 2733 int3 van[2] = {70, 80, 90, 100, 110, 120}; 2734 float3 vaf[2] = {55.1, 55.2, 55.3, 55.4, 55.5, 55.6}; 2735 int3 vanf[2] = {130, 140, 150, 160, 170, 180}; 2736 bool3 vabf[2] = {1, 1, 1, 1, 1, 1}; 2737 float4 main(float4 pos : POSITION) : POSITION 2738 { 2739 float4 tmp = 0; 2740 int i; 2741 if (vab[1].z) for (i = 0; i < van[1].z; i++) tmp.x += pos.z * vaf[1].z * vanf[1].z; 2742 else for (i = 0; i < van[1].y; i++) tmp.y += pos.y * vaf[0].y * vabf[1].z; 2743 return tmp; 2744 } 2745 #endif 2746 static const DWORD registerset_blob_vector_array[] = 2747 { 2748 0xfffe0300, 0x0070fffe, 0x42415443, 0x0000001c, 0x0000018b, 0xfffe0300, 0x00000005, 0x0000001c, 2749 0x00000100, 0x00000184, 0x00000080, 0x00000000, 0x00000006, 0x00000084, 0x00000094, 0x000000ac, 2750 0x00040002, 0x00000002, 0x000000b4, 0x000000c4, 0x000000e4, 0x00000002, 0x00000002, 0x000000e8, 2751 0x000000f8, 0x00000118, 0x00000001, 0x00000006, 0x0000011c, 0x0000012c, 0x0000014c, 0x00020002, 2752 0x00000002, 0x00000154, 0x00000164, 0x00626176, 0x00010001, 0x00030001, 0x00000002, 0x00000000, 2753 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x66626176, 0xababab00, 2754 0x00010001, 0x00030001, 0x00000002, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 2755 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00666176, 0x00030001, 0x00030001, 0x00000002, 2756 0x00000000, 0x425c6666, 0x425ccccd, 0x425d3333, 0x00000000, 0x425d999a, 0x425e0000, 0x425e6666, 2757 0x00000000, 0x006e6176, 0x00020001, 0x00030001, 0x00000002, 0x00000000, 0x00000046, 0x00000050, 2758 0x0000005a, 0x00000000, 0x00000064, 0x0000006e, 0x00000078, 0x00000000, 0x666e6176, 0xababab00, 2759 0x00020001, 0x00030001, 0x00000002, 0x00000000, 0x43020000, 0x430c0000, 0x43160000, 0x00000000, 2760 0x43200000, 0x432a0000, 0x43340000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 2761 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 2762 0x332e3235, 0x00313131, 0x05000051, 0xa00f0006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2763 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e40805, 2764 0x03000005, 0x80010000, 0xa0aa0001, 0x90aa0000, 0x02000001, 0x80010001, 0xa0000006, 0x01000026, 2765 0xf0e40005, 0x04000004, 0x80010001, 0x80000000, 0xa0aa0003, 0x80000001, 0x00000027, 0x02000001, 2766 0x80020001, 0xa0000006, 0x0000002a, 0x03000005, 0x80010000, 0xa0550000, 0x90550000, 0x02000001, 2767 0x80020001, 0xa0000006, 0x01000026, 0xf0e40004, 0x04000004, 0x80020001, 0x80000000, 0xa0aa0005, 2768 0x80550001, 0x00000027, 0x02000001, 0x80010001, 0xa0000006, 0x0000002b, 0x02000001, 0xe0030000, 2769 0x80e40001, 0x02000001, 0xe00c0000, 0xa0000006, 0x0000ffff, 2770 }; 2771 2772 static const struct registerset_constants registerset_constants_vector_array_float[] = 2773 { 2774 {"vaf", {"vaf", D3DXRS_FLOAT4, 0, 2, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 2, 0, 24, NULL}, 62}, 2775 {"vaf[0]", {"vaf", D3DXRS_FLOAT4, 0, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 62}, 2776 {"vaf[1]", {"vaf", D3DXRS_FLOAT4, 1, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 66}, 2777 }; 2778 2779 static const struct registerset_test registerset_test_vector_array_float[] = 2780 { 2781 {SetInt}, 2782 {SetBool}, 2783 {SetFloat}, 2784 {SetIntArray, 1, 0, 2}, 2785 {SetIntArray, 1, 3, 5, 4, {0x40000000, 0x40400000, 0x40800000}}, 2786 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2787 {0x40000000, 0x40400000, 0x40800000, 0x00000000, 0x40a00000, 0x00000000, 0x40e00000}}, 2788 {SetBoolArray, 1, 0, 2}, 2789 {SetBoolArray, 1, 3, 5, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2790 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2791 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 2792 {SetFloatArray, 0, 0, 2}, 2793 {SetFloatArray, 0, 3, 5, 4, {0x40000123, 0x00000000, 0x40800123}}, 2794 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 2795 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40a00123, 0x40c00123, 0x40e00123}}, 2796 {SetValue, 0, 0, 11}, 2797 {SetValue, 0, 12, 23, 4, {0x40000123, 0x00000000, 0x40800123}}, 2798 {SetValue, 0, 24, REGISTER_OUTPUT_SIZE * 4, 8, 2799 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40a00123, 0x40c00123, 0x40e00123}}, 2800 {SetVector, 0, 0, 0, 4, {0x40000123, 0x00000000, 0x40800123}}, 2801 {SetVectorArray}, 2802 {SetVectorArray, 0, 1, 1, 4, {0x40000123, 0x00000000, 0x40800123}}, 2803 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 2804 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 2805 {SetMatrix, 0, 0, 0, 8, 2806 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 2807 {SetMatrixArray}, 2808 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2809 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 2810 {SetMatrixTranspose, 0, 0, 0, 8, 2811 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 2812 {SetMatrixTransposeArray}, 2813 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2814 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 2815 {SetMatrixPointerArray}, 2816 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2817 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 2818 {SetMatrixTransposePointerArray}, 2819 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2820 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 2821 }; 2822 2823 static const struct registerset_constants registerset_constants_vector_array_int[] = 2824 { 2825 {"van", {"van", D3DXRS_INT4, 0, 6, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 2, 0, 24, NULL}, 75}, 2826 {"van[0]", {"van", D3DXRS_INT4, 0, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 75}, 2827 {"van[1]", {"van", D3DXRS_INT4, 1, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 79}, 2828 }; 2829 2830 static const struct registerset_test registerset_test_vector_array_int[] = 2831 { 2832 {SetInt}, 2833 {SetBool}, 2834 {SetFloat}, 2835 {SetIntArray, 1, 0, 2}, 2836 {SetIntArray, 1, 3, 5, 4, {0x00000002, 0x00000003, 0x00000004}}, 2837 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2838 {0x00000002, 0x00000003, 0x00000004, 0x00000000, 0x00000005, 0x00000000, 0x00000007}}, 2839 {SetBoolArray, 1, 0, 2}, 2840 {SetBoolArray, 1, 3, 5, 4, {0x00000001, 0x00000001, 0x00000001}}, 2841 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2842 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001}}, 2843 {SetFloatArray, 0, 0, 2}, 2844 {SetFloatArray, 0, 3, 5, 4, {0x00000002, 0x00000000, 0x00000004}}, 2845 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 2846 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000005, 0x00000006, 0x00000007}}, 2847 {SetValue, 1, 0, 11}, 2848 {SetValue, 1, 12, 23, 4, {0x00000002, 0x00000003, 0x00000004}}, 2849 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 2850 {0x00000002, 0x00000003, 0x00000004, 0x00000000, 0x00000005, 0x00000000, 0x00000007}}, 2851 {SetVector, 0, 0, 0, 4, {0x00000002, 0x00000000, 0x00000004}}, 2852 {SetVectorArray, 0, 0, 0}, 2853 {SetVectorArray, 0, 1, 1, 4, {0x00000002, 0x00000000, 0x00000004}}, 2854 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 2855 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 2856 {SetMatrix, 0, 0, 0, 8, 2857 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 2858 {SetMatrixArray}, 2859 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2860 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 2861 {SetMatrixTranspose, 0, 0, 0, 8, 2862 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 2863 {SetMatrixTransposeArray}, 2864 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2865 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 2866 {SetMatrixPointerArray}, 2867 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2868 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 2869 {SetMatrixTransposePointerArray}, 2870 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2871 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 2872 }; 2873 2874 static const struct registerset_constants registerset_constants_vector_array_bool[] = 2875 { 2876 {"vab", {"vab", D3DXRS_BOOL, 0, 6, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 2, 0, 24, NULL}, 37}, 2877 {"vab[0]", {"vab", D3DXRS_BOOL, 0, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 37}, 2878 {"vab[1]", {"vab", D3DXRS_BOOL, 3, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 40}, 2879 }; 2880 2881 static const struct registerset_test registerset_test_vector_array_bool[] = 2882 { 2883 {SetInt}, 2884 {SetBool}, 2885 {SetFloat}, 2886 {SetIntArray, 1, 0, 2}, 2887 {SetIntArray, 1, 3, 5, 3, {0x00000001, 0x00000001, 0x00000001}}, 2888 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 2889 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 2890 {SetBoolArray, 1, 0}, 2891 {SetBoolArray, 1, 3, 5, 3, {0x00000002, 0x00000003, 0x00000004}}, 2892 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 2893 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 2894 {SetFloatArray, 0, 0, 2}, 2895 {SetFloatArray, 0, 3, 5, 3, {0x00000001, 0x00000000, 0x00000001}}, 2896 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 6, 2897 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 2898 {SetValue, 1, 0, 11}, 2899 {SetValue, 1, 12, 23, 3, {0x00000002, 0x00000003, 0x00000004}}, 2900 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 6, 2901 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 2902 {SetVector, 0, 0, 0, 3, {0x00000001, 0x00000000, 0x00000001}}, 2903 {SetVectorArray}, 2904 {SetVectorArray, 0, 1, 1, 3, {0x00000001, 0x00000000, 0x00000001}}, 2905 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 6, 2906 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 2907 {SetMatrix, 0, 0, 0, 6, 2908 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 2909 {SetMatrixArray}, 2910 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 2911 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 2912 {SetMatrixTranspose, 0, 0, 0, 6, 2913 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 2914 {SetMatrixTransposeArray}, 2915 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 2916 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 2917 {SetMatrixPointerArray}, 2918 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 2919 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 2920 {SetMatrixTransposePointerArray}, 2921 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 2922 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 2923 }; 2924 2925 static const struct registerset_constants registerset_constants_vector_array_bool_float[] = 2926 { 2927 {"vabf", {"vabf", D3DXRS_FLOAT4, 4, 2, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 2, 0, 24, NULL}, 49}, 2928 {"vabf[0]", {"vabf", D3DXRS_FLOAT4, 4, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 49}, 2929 {"vabf[1]", {"vabf", D3DXRS_FLOAT4, 5, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 53}, 2930 }; 2931 2932 static const struct registerset_test registerset_test_vector_array_bool_float[] = 2933 { 2934 {SetInt}, 2935 {SetBool}, 2936 {SetFloat}, 2937 {SetIntArray, 1, 0, 2}, 2938 {SetIntArray, 1, 3, 5, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2939 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2940 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 2941 {SetBoolArray, 1, 0, 2}, 2942 {SetBoolArray, 1, 3, 5, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2943 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2944 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 2945 {SetFloatArray, 0, 0, 2}, 2946 {SetFloatArray, 0, 3, 5, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2947 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 2948 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 2949 {SetValue, 1, 0, 11}, 2950 {SetValue, 1, 12, 23, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2951 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 2952 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 2953 {SetVector, 0, 0, 0, 4, {0x3f800000, 0x00000000, 0x3f800000},}, 2954 {SetVectorArray}, 2955 {SetVectorArray, 0, 1, 1, 4, {0x3f800000, 0x00000000, 0x3f800000}}, 2956 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 2957 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 2958 {SetMatrix, 0, 0, 0, 8, 2959 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 2960 {SetMatrixArray}, 2961 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2962 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 2963 {SetMatrixTranspose, 0, 0, 0, 8, 2964 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 2965 {SetMatrixTransposeArray}, 2966 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2967 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 2968 {SetMatrixPointerArray}, 2969 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2970 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 2971 {SetMatrixTransposePointerArray}, 2972 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 2973 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 2974 }; 2975 2976 static const struct registerset_constants registerset_constants_vector_array_int_float[] = 2977 { 2978 {"vanf", {"vanf", D3DXRS_FLOAT4, 2, 2, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 2, 0, 24, NULL}, 89}, 2979 {"vanf[0]", {"vanf", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 89}, 2980 {"vanf[1]", {"vanf", D3DXRS_FLOAT4, 3, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 93}, 2981 }; 2982 2983 static const struct registerset_test registerset_test_vector_array_int_float[] = 2984 { 2985 {SetInt}, 2986 {SetBool}, 2987 {SetFloat}, 2988 {SetIntArray, 1, 0, 2}, 2989 {SetIntArray, 1, 3, 5, 4, {0x40000000, 0x40400000, 0x40800000}}, 2990 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2991 {0x40000000, 0x40400000, 0x40800000, 0x00000000, 0x40a00000, 0x00000000, 0x40e00000}}, 2992 {SetBoolArray, 1, 0, 2}, 2993 {SetBoolArray, 1, 3, 5, 4, {0x3f800000, 0x3f800000, 0x3f800000}}, 2994 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 2995 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 2996 {SetFloatArray, 2, 0, 2,}, 2997 {SetFloatArray, 0, 3, 5, 4, {0x40000000, 0x00000000, 0x40800000}}, 2998 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 2999 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000}}, 3000 {SetValue, 1, 0, 11}, 3001 {SetValue, 1, 12, 23, 4, {0x40000000, 0x40400000, 0x40800000}}, 3002 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 3003 {0x40000000, 0x40400000, 0x40800000, 0x00000000, 0x40a00000, 0x00000000, 0x40e00000}}, 3004 {SetVector, 0, 0, 0, 4, {0x40000000, 0x00000000, 0x40800000}}, 3005 {SetVectorArray}, 3006 {SetVectorArray, 0, 1, 1, 4, {0x40000000, 0x00000000, 0x40800000}}, 3007 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 3008 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3009 {SetMatrix, 0, 0, 0, 8, 3010 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3011 {SetMatrixArray}, 3012 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3013 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3014 {SetMatrixTranspose, 0, 0, 0, 8, 3015 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3016 {SetMatrixTransposeArray}, 3017 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3018 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3019 {SetMatrixPointerArray}, 3020 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3021 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3022 {SetMatrixTransposePointerArray}, 3023 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3024 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3025 }; 3026 3027 /* 3028 * fxc.exe /Tvs_3_0 3029 */ 3030 #if 0 3031 bool3x2 cb = {1, 0, 1, 1, 0, 1}; 3032 int3x2 cn = {4, 5, 6, 7, 8, 9}; 3033 float3x2 cf = {15.1, 15.2, 15.3, 15.4, 15.5, 15.6}; 3034 bool3x2 cbf = {1, 1, 0, 1, 0, 1}; 3035 int3x2 cnf = {30, 31, 33, 32, 34, 36}; 3036 float4 main(float4 pos : POSITION) : POSITION 3037 { 3038 float4 tmp = 0; 3039 int i; 3040 if (cb._32) for (i = 0; i < cn._31; i++) tmp.x += pos.z * cf._31 * cbf._32; 3041 else for (i = 0; i < cn._32; i++) tmp.y += pos.y * cf._32 * cnf._32; 3042 return tmp; 3043 } 3044 #endif 3045 static const DWORD registerset_blob_column[] = 3046 { 3047 0xfffe0300, 0x0066fffe, 0x42415443, 0x0000001c, 0x00000163, 0xfffe0300, 0x00000005, 0x0000001c, 3048 0x00000100, 0x0000015c, 0x00000080, 0x00000000, 0x00000006, 0x00000084, 0x00000094, 0x000000ac, 3049 0x00020002, 0x00000002, 0x00000084, 0x000000b0, 0x000000d0, 0x00000002, 0x00000002, 0x000000d4, 3050 0x000000e4, 0x00000104, 0x00000001, 0x00000006, 0x00000108, 0x00000118, 0x00000138, 0x00040002, 3051 0x00000002, 0x00000108, 0x0000013c, 0xab006263, 0x00010003, 0x00020003, 0x00000001, 0x00000000, 3052 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x00666263, 0x3f800000, 3053 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0xab006663, 3054 0x00030003, 0x00020003, 0x00000001, 0x00000000, 0x4171999a, 0x4174cccd, 0x41780000, 0x00000000, 3055 0x41733333, 0x41766666, 0x4179999a, 0x00000000, 0xab006e63, 0x00020003, 0x00020003, 0x00000001, 3056 0x00000000, 0x00000004, 0x00000006, 0x00000008, 0x00000000, 0x00000005, 0x00000007, 0x00000009, 3057 0x00000000, 0x00666e63, 0x41f00000, 0x42040000, 0x42080000, 0x00000000, 0x41f80000, 0x42000000, 3058 0x42100000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 3059 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 3060 0x05000051, 0xa00f0006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 3061 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e40805, 0x03000005, 0x80010000, 3062 0xa0aa0000, 0x90aa0000, 0x02000001, 0x80010001, 0xa0000006, 0x01000026, 0xf0e40004, 0x04000004, 3063 0x80010001, 0x80000000, 0xa0aa0003, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa0000006, 3064 0x0000002a, 0x03000005, 0x80010000, 0xa0aa0001, 0x90550000, 0x02000001, 0x80020001, 0xa0000006, 3065 0x01000026, 0xf0e40005, 0x04000004, 0x80020001, 0x80000000, 0xa0aa0005, 0x80550001, 0x00000027, 3066 0x02000001, 0x80010001, 0xa0000006, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 3067 0xe00c0000, 0xa0000006, 0x0000ffff, 3068 }; 3069 3070 static const struct registerset_constants registerset_constants_column_float[] = 3071 { 3072 {"cf", {"cf", D3DXRS_FLOAT4, 0, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 57}, 3073 }; 3074 3075 static const struct registerset_test registerset_test_column_float[] = 3076 { 3077 {SetInt}, 3078 {SetBool}, 3079 {SetFloat}, 3080 {SetIntArray, 1, 0, 5}, 3081 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3082 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3083 {SetBoolArray, 1, 0, 5}, 3084 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3085 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3086 {SetFloatArray, 0, 0, 5}, 3087 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 3088 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123}}, 3089 {SetValue, 0, 0, 23}, 3090 {SetValue, 0, 24, REGISTER_OUTPUT_SIZE * 4, 8, 3091 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123}}, 3092 {SetVector}, 3093 {SetVectorArray, 0, 0, 1}, 3094 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 3095 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3096 {SetMatrix, 0, 0, 0, 8, 3097 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3098 {SetMatrixArray}, 3099 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3100 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3101 {SetMatrixTranspose, 0, 0, 0, 8, 3102 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3103 {SetMatrixTransposeArray}, 3104 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3105 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3106 {SetMatrixPointerArray}, 3107 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3108 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3109 {SetMatrixTransposePointerArray}, 3110 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3111 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3112 }; 3113 3114 static const struct registerset_constants registerset_constants_column_int[] = 3115 { 3116 {"cn", {"cn", D3DXRS_INT4, 0, 6, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 70}, 3117 }; 3118 3119 static const struct registerset_test registerset_test_column_int[] = 3120 { 3121 {SetInt}, 3122 {SetBool}, 3123 {SetFloat}, 3124 {SetIntArray, 1, 0, 5}, 3125 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3126 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3127 {SetBoolArray, 1, 0, 5}, 3128 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3129 {0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3130 {SetFloatArray, 0, 0, 5}, 3131 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 3132 {0x00000002, 0x00000004, 0x00000006, 0x00000000, 0x00000000, 0x00000005, 0x00000007}}, 3133 {SetValue, 1, 0, 23}, 3134 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 3135 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3136 {SetVector}, 3137 {SetVectorArray, 0, 0, 1}, 3138 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 3139 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3140 {SetMatrix, 0, 0, 0, 8, 3141 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3142 {SetMatrixArray}, 3143 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3144 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3145 {SetMatrixTranspose, 0, 0, 0, 8, 3146 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3147 {SetMatrixTransposeArray}, 3148 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3149 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3150 {SetMatrixPointerArray}, 3151 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3152 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3153 {SetMatrixTransposePointerArray}, 3154 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3155 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3156 }; 3157 3158 static const struct registerset_constants registerset_constants_column_bool[] = 3159 { 3160 {"cb", {"cb", D3DXRS_BOOL, 0, 6, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 37}, 3161 }; 3162 3163 static const struct registerset_test registerset_test_column_bool[] = 3164 { 3165 {SetInt}, 3166 {SetBool}, 3167 {SetFloat}, 3168 {SetIntArray, 1, 0, 5}, 3169 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 3170 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3171 {SetBoolArray, 1, 0, 5}, 3172 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 3173 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3174 {SetFloatArray, 0, 0, 5}, 3175 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 6, 3176 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3177 {SetValue, 1, 0, 23}, 3178 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 6, 3179 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3180 {SetVector}, 3181 {SetVectorArray, 0, 0, 1}, 3182 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 6, 3183 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3184 {SetMatrix, 0, 0, 0, 6, 3185 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3186 {SetMatrixArray}, 3187 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3188 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3189 {SetMatrixTranspose, 0, 0, 0, 6, 3190 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3191 {SetMatrixTransposeArray}, 3192 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 6, 3193 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3194 {SetMatrixPointerArray}, 3195 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3196 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3197 {SetMatrixTransposePointerArray}, 3198 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3199 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3200 }; 3201 3202 static const struct registerset_constants registerset_constants_column_int_float[] = 3203 { 3204 {"cnf", {"cnf", D3DXRS_FLOAT4, 4, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 79}, 3205 }; 3206 3207 static const struct registerset_test registerset_test_column_int_float[] = 3208 { 3209 {SetInt}, 3210 {SetBool}, 3211 {SetFloat}, 3212 {SetIntArray, 1, 0, 5}, 3213 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3214 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3215 {SetBoolArray, 1, 0, 5}, 3216 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3217 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3218 {SetFloatArray, 0, 0, 5}, 3219 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 3220 {0x40000000, 0x40800000, 0x40c00000, 0x00000000, 0x00000000, 0x40a00000, 0x40e00000}}, 3221 {SetValue, 1, 0, 23}, 3222 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 3223 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3224 {SetVector}, 3225 {SetVectorArray, 0, 0, 1}, 3226 {SetValue, 0, 0, 23}, 3227 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 3228 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3229 {SetMatrix, 0, 0, 0, 8, 3230 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3231 {SetMatrixArray}, 3232 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3233 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3234 {SetMatrixTranspose, 0, 0, 0, 8, 3235 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3236 {SetMatrixTransposeArray}, 3237 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3238 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3239 {SetMatrixPointerArray}, 3240 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3241 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3242 {SetMatrixTransposePointerArray}, 3243 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3244 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3245 }; 3246 3247 static const struct registerset_constants registerset_constants_column_bool_float[] = 3248 { 3249 {"cbf", {"cbf", D3DXRS_FLOAT4, 2, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 44}, 3250 }; 3251 3252 static const struct registerset_test registerset_test_column_bool_float[] = 3253 { 3254 {SetInt}, 3255 {SetBool}, 3256 {SetFloat}, 3257 {SetIntArray, 1, 0, 5}, 3258 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3259 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3260 {SetBoolArray, 1, 0, 5}, 3261 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 8, 3262 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3263 {SetFloatArray, 0, 0, 5}, 3264 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 8, 3265 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3266 {SetValue, 1, 0, 23}, 3267 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 8, 3268 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3269 {SetVector}, 3270 {SetVectorArray, 0, 0, 1}, 3271 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 3272 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3273 {SetMatrix, 0, 0, 0, 8, 3274 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3275 {SetMatrixArray}, 3276 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3277 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3278 {SetMatrixTranspose, 0, 0, 0, 8, 3279 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3280 {SetMatrixTransposeArray}, 3281 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3282 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3283 {SetMatrixPointerArray}, 3284 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3285 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3286 {SetMatrixTransposePointerArray}, 3287 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 3288 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3289 }; 3290 3291 /* 3292 * fxc.exe /Tvs_3_0 3293 */ 3294 #if 0 3295 bool3x2 cab[2] = {1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1}; 3296 int3x2 can[2] = {14, 15, 16, 71, 18, 19, 55, 63, 96, 96, 97, 13}; 3297 float3x2 caf[2] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 1.2, 1.3, 1.4}; 3298 bool3x2 cabf[2] = {1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1}; 3299 int3x2 canf[2] = {300, 301, 303, 302, 304, 306, 350, 365, 654, 612, 326, 999}; 3300 float4 main(float4 pos : POSITION) : POSITION 3301 { 3302 float4 tmp = 0; 3303 int i; 3304 if (cab[1]._32) for (i = 0; i < can[1]._31; i++) tmp.x += pos.z * caf[1]._31 * cabf[1]._32; 3305 else for (i = 0; i < can[1]._32; i++) tmp.y += pos.y * caf[1]._32 * canf[1]._32; 3306 return tmp; 3307 } 3308 #endif 3309 static const DWORD registerset_blob_column_array[] = 3310 { 3311 0xfffe0300, 0x0096fffe, 0x42415443, 0x0000001c, 0x00000223, 0xfffe0300, 0x00000005, 0x0000001c, 3312 0x00000100, 0x0000021c, 0x00000080, 0x00000000, 0x0000000c, 0x00000084, 0x00000094, 0x000000c4, 3313 0x00040002, 0x00000004, 0x000000cc, 0x000000dc, 0x0000011c, 0x00000002, 0x00000004, 0x00000120, 3314 0x00000130, 0x00000170, 0x00000001, 0x0000000c, 0x00000174, 0x00000184, 0x000001c4, 0x00080002, 3315 0x00000004, 0x000001cc, 0x000001dc, 0x00626163, 0x00010003, 0x00020003, 0x00000002, 0x00000000, 3316 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 3317 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x66626163, 0xababab00, 0x00010003, 0x00020003, 3318 0x00000002, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 3319 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 3320 0x3f800000, 0x00000000, 0x00666163, 0x00030003, 0x00020003, 0x00000002, 0x00000000, 0x3f8ccccd, 3321 0x40533333, 0x40b00000, 0x00000000, 0x400ccccd, 0x408ccccd, 0x40d33333, 0x00000000, 0x40f66666, 3322 0x411e6666, 0x3fa66666, 0x00000000, 0x410ccccd, 0x3f99999a, 0x3fb33333, 0x00000000, 0x006e6163, 3323 0x00020003, 0x00020003, 0x00000002, 0x00000000, 0x0000000e, 0x00000010, 0x00000012, 0x00000000, 3324 0x0000000f, 0x00000047, 0x00000013, 0x00000000, 0x00000037, 0x00000060, 0x00000061, 0x00000000, 3325 0x0000003f, 0x00000060, 0x0000000d, 0x00000000, 0x666e6163, 0xababab00, 0x00020003, 0x00020003, 3326 0x00000002, 0x00000000, 0x43960000, 0x43978000, 0x43980000, 0x00000000, 0x43968000, 0x43970000, 3327 0x43990000, 0x00000000, 0x43af0000, 0x44238000, 0x43a30000, 0x00000000, 0x43b68000, 0x44190000, 3328 0x4479c000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 3329 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 3330 0x05000051, 0xa00f000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 3331 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e4080b, 0x03000005, 0x80010000, 3332 0xa0aa0002, 0x90aa0000, 0x02000001, 0x80010001, 0xa000000c, 0x01000026, 0xf0e4000a, 0x04000004, 3333 0x80010001, 0x80000000, 0xa0aa0007, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa000000c, 3334 0x0000002a, 0x03000005, 0x80010000, 0xa0aa0003, 0x90550000, 0x02000001, 0x80020001, 0xa000000c, 3335 0x01000026, 0xf0e4000b, 0x04000004, 0x80020001, 0x80000000, 0xa0aa000b, 0x80550001, 0x00000027, 3336 0x02000001, 0x80010001, 0xa000000c, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 3337 0xe00c0000, 0xa000000c, 0x0000ffff, 3338 }; 3339 3340 static const struct registerset_constants registerset_constants_column_array_float[] = 3341 { 3342 {"caf", {"caf", D3DXRS_FLOAT4, 0, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 2, 0, 48, NULL}, 76}, 3343 {"caf[0]", {"caf", D3DXRS_FLOAT4, 0, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 76}, 3344 {"caf[1]", {"caf", D3DXRS_FLOAT4, 2, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 84}, 3345 }; 3346 3347 static const struct registerset_test registerset_test_column_array_float[] = 3348 { 3349 {SetInt}, 3350 {SetBool}, 3351 {SetFloat}, 3352 {SetIntArray, 1, 0, 5}, 3353 {SetIntArray, 1, 6, 11, 8, 3354 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3355 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3356 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000, 0x00000000, 3357 0x41000000, 0x41200000, 0x41400000, 0x00000000, 0x41100000, 0x41300000, 0x41500000}}, 3358 {SetBoolArray, 1, 0, 5}, 3359 {SetBoolArray, 1, 6, 11, 8, 3360 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3361 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3362 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3363 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3364 {SetFloatArray, 0, 0, 5}, 3365 {SetFloatArray, 0, 6, 11, 8, 3366 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123}}, 3367 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 16, 3368 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123, 0x00000000, 3369 0x41000123, 0x41200123, 0x41400123, 0x00000000, 0x41100123, 0x41300123, 0x41500123}}, 3370 {SetValue, 0, 0, 23}, 3371 {SetValue, 0, 24, 47, 8, 3372 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123}}, 3373 {SetValue, 0, 48, REGISTER_OUTPUT_SIZE * 4, 16, 3374 {0x40000123, 0x40800123, 0x40c00123, 0x00000000, 0x00000000, 0x40a00123, 0x40e00123, 0x00000000, 3375 0x41000123, 0x41200123, 0x41400123, 0x00000000, 0x41100123, 0x41300123, 0x41500123}}, 3376 {SetVector}, 3377 {SetVectorArray, 0, 0, 1}, 3378 {SetVectorArray, 0, 2, 3, 8, 3379 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3380 {SetVectorArray, 0, 4, REGISTER_OUTPUT_SIZE / 4, 16, 3381 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 3382 0x41600123, 0x41a00123, 0x00000000, 0x00000000, 0x41700123, 0x41b00123, 0x41f00123}}, 3383 {SetMatrix, 0, 0, 0, 8, 3384 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3385 {SetMatrixArray}, 3386 {SetMatrixArray, 0, 1, 1, 8, 3387 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3388 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3389 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 3390 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 0x41b00123, 0x41f00123, 0x42300123}}, 3391 {SetMatrixTranspose, 0, 0, 0, 8, 3392 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3393 {SetMatrixTransposeArray}, 3394 {SetMatrixTransposeArray, 0, 1, 1, 8, 3395 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3396 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3397 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 3398 0x41a00123, 0x41b00123, 0x41c00123, 0x00000000, 0x00000000, 0x41f00123, 0x42000123}}, 3399 {SetMatrixPointerArray}, 3400 {SetMatrixPointerArray, 0, 1, 1, 8, 3401 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123}}, 3402 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3403 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 3404 0x41900123, 0x41d00123, 0x42100123, 0x00000000, 0x41a00123, 0x00000000, 0x00000000}}, 3405 {SetMatrixTransposePointerArray}, 3406 {SetMatrixTransposePointerArray, 0, 1, 1, 8, 3407 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123}}, 3408 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3409 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 3410 0x41900123, 0x41a00123, 0x41b00123, 0x00000000, 0x41d00123, 0x00000000, 0x41f00123}}, 3411 }; 3412 3413 static const struct registerset_constants registerset_constants_column_array_int[] = 3414 { 3415 {"can", {"can", D3DXRS_INT4, 0, 12, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 2, 0, 48, NULL}, 97}, 3416 {"can[0]", {"can", D3DXRS_INT4, 0, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 97}, 3417 {"can[1]", {"can", D3DXRS_INT4, 2, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 105}, 3418 }; 3419 3420 static const struct registerset_test registerset_test_column_array_int[] = 3421 { 3422 {SetInt}, 3423 {SetBool}, 3424 {SetFloat}, 3425 {SetIntArray, 1, 0, 5}, 3426 {SetIntArray, 1, 6, 11, 8, 3427 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3428 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3429 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007, 0x00000000, 3430 0x00000008, 0x0000000a, 0x0000000c, 0x00000000, 0x00000009, 0x0000000b, 0x0000000d}}, 3431 {SetBoolArray, 1, 0, 5}, 3432 {SetBoolArray, 1, 6, 11, 8, 3433 {0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3434 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3435 {0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 3436 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3437 {SetFloatArray, 0, 0, 5}, 3438 {SetFloatArray, 0, 6, 11, 8, 3439 {0x00000002, 0x00000004, 0x00000006, 0x00000000, 0x00000000, 0x00000005, 0x00000007}}, 3440 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 16, 3441 {0x00000002, 0x00000004, 0x00000006, 0x00000000, 0x00000000, 0x00000005, 0x00000007, 0x00000000, 3442 0x00000008, 0x0000000a, 0x0000000c, 0x00000000, 0x00000009, 0x0000000b, 0x0000000d}}, 3443 {SetValue, 1, 0, 23}, 3444 {SetValue, 1, 24, 47, 8, 3445 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3446 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 16, 3447 {0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0x00000005, 0x00000007, 0x00000000, 3448 0x00000008, 0x0000000a, 0x0000000c, 0x00000000, 0x00000009, 0x0000000b, 0x0000000d}}, 3449 {SetVector}, 3450 {SetVectorArray, 0, 0, 1}, 3451 {SetVectorArray, 0, 2, 3, 8, 3452 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3453 {SetVectorArray, 0, 4, REGISTER_OUTPUT_SIZE / 4, 16, 3454 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b, 0x00000000, 3455 0x0000000e, 0x00000014, 0x00000000, 0x00000000, 0x0000000f, 0x00000016, 0x0000001e}}, 3456 {SetMatrix, 0, 0, 0, 8, 3457 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3458 {SetMatrixArray}, 3459 {SetMatrixArray, 0, 1, 1, 8, 3460 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3461 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3462 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b, 0x00000000, 3463 0x00000014, 0x00000000, 0x00000000, 0x00000000, 0x00000016, 0x0000001e, 0x0000002c}}, 3464 {SetMatrixTranspose, 0, 0, 0, 8, 3465 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3466 {SetMatrixTransposeArray}, 3467 {SetMatrixTransposeArray, 0, 1, 1, 8, 3468 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3469 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3470 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00000000, 3471 0x00000014, 0x00000016, 0x00000018, 0x00000000, 0x00000000, 0x0000001e, 0x00000020}}, 3472 {SetMatrixPointerArray}, 3473 {SetMatrixPointerArray, 0, 1, 1, 8, 3474 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b}}, 3475 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3476 {0x00000002, 0x00000006, 0x0000000a, 0x00000000, 0x00000000, 0x00000007, 0x0000000b, 0x00000000, 3477 0x00000012, 0x0000001a, 0x00000024, 0x00000000, 0x00000014, 0x00000000, 0x00000000}}, 3478 {SetMatrixTransposePointerArray}, 3479 {SetMatrixTransposePointerArray, 0, 1, 1, 8, 3480 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008}}, 3481 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3482 {0x00000002, 0x00000000, 0x00000004, 0x00000000, 0x00000006, 0x00000007, 0x00000008, 0x00000000, 3483 0x00000012, 0x00000014, 0x00000016, 0x00000000, 0x0000001a, 0x00000000, 0x0000001e}}, 3484 }; 3485 3486 static const struct registerset_constants registerset_constants_column_array_bool[] = 3487 { 3488 {"cab", {"cab", D3DXRS_BOOL, 0, 12, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 2, 0, 48, NULL}, 37}, 3489 {"cab[0]", {"cab", D3DXRS_BOOL, 0, 6, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 37}, 3490 {"cab[1]", {"cab", D3DXRS_BOOL, 6, 6, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 43}, 3491 }; 3492 3493 static const struct registerset_test registerset_test_column_array_bool[] = 3494 { 3495 {SetInt}, 3496 {SetBool}, 3497 {SetFloat}, 3498 {SetIntArray, 1, 0, 5}, 3499 {SetIntArray, 1, 6, 11, 6, 3500 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3501 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 12, 3502 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3503 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3504 {SetBoolArray, 1, 0, 5}, 3505 {SetBoolArray, 1, 6, 11, 6, 3506 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3507 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 12, 3508 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007, 0x00000008, 0x0000000a, 3509 0x0000000c, 0x00000009, 0x0000000b, 0x0000000d}}, 3510 {SetFloatArray, 0, 0, 5}, 3511 {SetFloatArray, 0, 6, 11, 6, 3512 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3513 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 12, 3514 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3515 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3516 {SetValue, 1, 0, 23}, 3517 {SetValue, 1, 24, 47, 6, 3518 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007}}, 3519 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 12, 3520 {0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x00000005, 0x00000007, 0x00000008, 0x0000000a, 3521 0x0000000c, 0x00000009, 0x0000000b, 0x0000000d}}, 3522 {SetVector}, 3523 {SetVectorArray, 0, 0, 1}, 3524 {SetVectorArray, 0, 2, 3, 6, 3525 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3526 {SetVectorArray, 0, 4, REGISTER_OUTPUT_SIZE / 4, 12, 3527 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3528 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3529 {SetMatrix, 0, 0, 0, 6, 3530 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3531 {SetMatrixArray}, 3532 {SetMatrixArray, 0, 1, 1, 6, 3533 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3534 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 3535 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 3536 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3537 {SetMatrixTranspose, 0, 0, 0, 6, 3538 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3539 {SetMatrixTransposeArray}, 3540 {SetMatrixTransposeArray, 0, 1, 1, 6, 3541 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3542 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 3543 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3544 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3545 {SetMatrixPointerArray}, 3546 {SetMatrixPointerArray, 0, 1, 1, 6, 3547 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 3548 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 3549 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3550 0x00000001, 0x00000001, 0x00000000, 0x00000000}}, 3551 {SetMatrixTransposePointerArray}, 3552 {SetMatrixTransposePointerArray, 0, 1, 1, 6, 3553 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3554 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 3555 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 3556 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 3557 }; 3558 3559 static const struct registerset_constants registerset_constants_column_array_int_float[] = 3560 { 3561 {"canf", {"canf", D3DXRS_FLOAT4, 8, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 2, 0, 48, NULL}, 119}, 3562 {"canf[0]", {"canf", D3DXRS_FLOAT4, 8, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 119}, 3563 {"canf[1]", {"canf", D3DXRS_FLOAT4, 10, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 127}, 3564 }; 3565 3566 static const struct registerset_test registerset_test_column_array_int_float[] = 3567 { 3568 {SetInt}, 3569 {SetBool}, 3570 {SetFloat}, 3571 {SetIntArray, 1, 0, 5}, 3572 {SetIntArray, 1, 6, 11, 8, 3573 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3574 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3575 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000, 0x00000000, 3576 0x41000000, 0x41200000, 0x41400000, 0x00000000, 0x41100000, 0x41300000, 0x41500000}}, 3577 {SetBoolArray, 1, 0, 5}, 3578 {SetBoolArray, 1, 6, 11, 8, 3579 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3580 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3581 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3582 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3583 {SetFloatArray, 0, 0, 5}, 3584 {SetFloatArray, 0, 6, 11, 8, 3585 {0x40000000, 0x40800000, 0x40c00000, 0x00000000, 0x00000000, 0x40a00000, 0x40e00000}}, 3586 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 16, 3587 {0x40000000, 0x40800000, 0x40c00000, 0x00000000, 0x00000000, 0x40a00000, 0x40e00000, 0x00000000, 3588 0x41000000, 0x41200000, 0x41400000, 0x00000000, 0x41100000, 0x41300000, 0x41500000}}, 3589 {SetValue, 1, 0, 23}, 3590 {SetValue, 1, 24, 47, 8, 3591 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000}}, 3592 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 16, 3593 {0x40000000, 0x40800000, 0x00000000, 0x00000000, 0x40400000, 0x40a00000, 0x40e00000, 0x00000000, 3594 0x41000000, 0x41200000, 0x41400000, 0x00000000, 0x41100000, 0x41300000, 0x41500000}}, 3595 {SetVector}, 3596 {SetVectorArray, 0, 0, 1},/*16*/ 3597 {SetVectorArray, 0, 2, 3, 8, 3598 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3599 {SetVectorArray, 0, 4, REGISTER_OUTPUT_SIZE / 4, 16, 3600 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000, 0x00000000, 3601 0x41600000, 0x41a00000, 0x00000000, 0x00000000, 0x41700000, 0x41b00000, 0x41f00000}}, 3602 {SetMatrix, 0, 0, 0, 8, 3603 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3604 {SetMatrixArray}, 3605 {SetMatrixArray, 0, 1, 1, 8, 3606 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3607 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3608 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000, 0x00000000, 3609 0x41a00000, 0x00000000, 0x00000000, 0x00000000, 0x41b00000, 0x41f00000, 0x42300000}}, 3610 {SetMatrixTranspose, 0, 0, 0, 8, 3611 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3612 {SetMatrixTransposeArray}, 3613 {SetMatrixTransposeArray, 0, 1, 1, 8, 3614 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3615 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3616 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000, 0x00000000, 3617 0x41a00000, 0x41b00000, 0x41c00000, 0x00000000, 0x00000000, 0x41f00000, 0x42000000}}, 3618 {SetMatrixPointerArray}, 3619 {SetMatrixPointerArray, 0, 1, 1, 8, 3620 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000}}, 3621 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3622 {0x40000000, 0x40c00000, 0x41200000, 0x00000000, 0x00000000, 0x40e00000, 0x41300000, 0x00000000, 3623 0x41900000, 0x41d00000, 0x42100000, 0x00000000, 0x41a00000, 0x00000000, 0x00000000}}, 3624 {SetMatrixTransposePointerArray}, 3625 {SetMatrixTransposePointerArray, 0, 1, 1, 8, 3626 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000}}, 3627 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3628 {0x40000000, 0x00000000, 0x40800000, 0x00000000, 0x40c00000, 0x40e00000, 0x41000000, 0x00000000, 3629 0x41900000, 0x41a00000, 0x41b00000, 0x00000000, 0x41d00000, 0x00000000, 0x41f00000}}, 3630 }; 3631 3632 static const struct registerset_constants registerset_constants_column_array_bool_float[] = 3633 { 3634 {"cabf", {"cabf", D3DXRS_FLOAT4, 4, 4, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 2, 0, 48, NULL}, 55}, 3635 {"cabf[0]", {"cabf", D3DXRS_FLOAT4, 4, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 55}, 3636 {"cabf[1]", {"cabf", D3DXRS_FLOAT4, 6, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 63}, 3637 }; 3638 3639 static const struct registerset_test registerset_test_column_array_bool_float[] = 3640 { 3641 {SetInt}, 3642 {SetBool}, 3643 {SetFloat}, 3644 {SetIntArray, 1, 0, 5}, 3645 {SetIntArray, 1, 6, 11, 8, 3646 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3647 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3648 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3649 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3650 {SetBoolArray, 1, 0, 5}, 3651 {SetBoolArray, 1, 6, 11, 8, 3652 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3653 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 16, 3654 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3655 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3656 {SetFloatArray, 0, 0, 5}, 3657 {SetFloatArray, 0, 6, 11, 8, 3658 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3659 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 16, 3660 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 3661 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3662 {SetValue, 1, 0, 23}, 3663 {SetValue, 1, 24, 47, 8, 3664 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3665 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 16, 3666 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3667 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3668 {SetVector}, 3669 {SetVectorArray, 0, 0, 1}, 3670 {SetVectorArray, 0, 2, 3, 8, 3671 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3672 {SetVectorArray, 0, 4, REGISTER_OUTPUT_SIZE / 4, 16, 3673 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 3674 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3675 {SetMatrix, 0, 0, 0, 8, 3676 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3677 {SetMatrixArray}, 3678 {SetMatrixArray, 0, 1, 1, 8, 3679 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3680 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3681 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 3682 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3683 {SetMatrixTranspose, 0, 0, 0, 8, 3684 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3685 {SetMatrixTransposeArray}, 3686 {SetMatrixTransposeArray, 0, 1, 1, 8, 3687 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3688 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3689 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3690 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3691 {SetMatrixPointerArray}, 3692 {SetMatrixPointerArray, 0, 1, 1, 8, 3693 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 3694 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3695 {0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 3696 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000}}, 3697 {SetMatrixTransposePointerArray}, 3698 {SetMatrixTransposePointerArray, 0, 1, 1, 8, 3699 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000}}, 3700 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 16, 3701 {0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 3702 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000}}, 3703 }; 3704 3705 /* 3706 * fxc.exe /Tvs_3_0 3707 */ 3708 #if 0 3709 row_major bool3x2 rb = {1, 1, 0, 0, 1, 1}; 3710 row_major int3x2 rn = {80, 81, 82, 83, 84, 85}; 3711 row_major float3x2 rf = {95.1, 95.2, 95.3, 95.4, 95.5, 95.6}; 3712 row_major bool3x2 rbf = {1, 1, 1, 1, 0, 1}; 3713 row_major int3x2 rnf = {37, 13, 98, 54, 77, 36}; 3714 float4 main(float4 pos : POSITION) : POSITION 3715 { 3716 float4 tmp = 0; 3717 int i; 3718 if (rb._32) for (i = 0; i < rn._31; i++) tmp.x += pos.z * rf._31 * rbf._32; 3719 else for (i = 0; i < rn._32; i++) tmp.y += pos.y * rf._32 * rnf._32; 3720 return tmp; 3721 } 3722 #endif 3723 static const DWORD registerset_blob_row[] = 3724 { 3725 0xfffe0300, 0x0076fffe, 0x42415443, 0x0000001c, 0x000001a3, 0xfffe0300, 0x00000005, 0x0000001c, 3726 0x00000100, 0x0000019c, 0x00000080, 0x00000000, 0x00000006, 0x00000084, 0x00000094, 0x000000ac, 3727 0x00030002, 0x00000003, 0x00000084, 0x000000b0, 0x000000e0, 0x00000002, 0x00000003, 0x000000e4, 3728 0x000000f4, 0x00000124, 0x00000001, 0x00000006, 0x00000128, 0x00000138, 0x00000168, 0x00060002, 3729 0x00000003, 0x00000128, 0x0000016c, 0xab006272, 0x00010002, 0x00020003, 0x00000001, 0x00000000, 3730 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00666272, 0x3f800000, 3731 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 3732 0x3f800000, 0x00000000, 0x00000000, 0xab006672, 0x00030002, 0x00020003, 0x00000001, 0x00000000, 3733 0x42be3333, 0x42be6666, 0x00000000, 0x00000000, 0x42be999a, 0x42becccd, 0x00000000, 0x00000000, 3734 0x42bf0000, 0x42bf3333, 0x00000000, 0x00000000, 0xab006e72, 0x00020002, 0x00020003, 0x00000001, 3735 0x00000000, 0x00000050, 0x00000051, 0x00000001, 0x00000000, 0x00000052, 0x00000053, 0x00000001, 3736 0x00000000, 0x00000054, 0x00000055, 0x00000001, 0x00000000, 0x00666e72, 0x42140000, 0x41500000, 3737 0x00000000, 0x00000000, 0x42c40000, 0x42580000, 0x00000000, 0x00000000, 0x429a0000, 0x42100000, 3738 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 3739 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 3740 0x05000051, 0xa00f0009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 3741 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e40805, 0x03000005, 0x80010000, 3742 0xa0000002, 0x90aa0000, 0x02000001, 0x80010001, 0xa0000009, 0x01000026, 0xf0e40004, 0x04000004, 3743 0x80010001, 0x80000000, 0xa0550005, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa0000009, 3744 0x0000002a, 0x03000005, 0x80010000, 0xa0550002, 0x90550000, 0x02000001, 0x80020001, 0xa0000009, 3745 0x01000026, 0xf0e40005, 0x04000004, 0x80020001, 0x80000000, 0xa0550008, 0x80550001, 0x00000027, 3746 0x02000001, 0x80010001, 0xa0000009, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 3747 0xe00c0000, 0xa0000009, 0x0000ffff, 3748 }; 3749 3750 static const struct registerset_constants registerset_constants_row_float[] = 3751 { 3752 {"rf", {"rf", D3DXRS_FLOAT4, 0, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 61}, 3753 }; 3754 3755 static const struct registerset_test registerset_test_row_float[] = 3756 { 3757 {SetInt}, 3758 {SetBool}, 3759 {SetFloat}, 3760 {SetIntArray, 1, 0, 5}, 3761 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3762 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 3763 0x00000000, 0x40e00000}}, 3764 {SetBoolArray, 1, 0, 5}, 3765 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3766 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3767 0x00000000, 0x3f800000}}, 3768 {SetFloatArray, 0, 0, 5}, 3769 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 12, 3770 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 3771 0x40c00123, 0x40e00123}}, 3772 {SetValue, 0, 0, 23}, 3773 {SetValue, 0, 24, REGISTER_OUTPUT_SIZE * 4, 12, 3774 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 3775 0x40c00123, 0x40e00123}}, 3776 {SetVector}, 3777 {SetVectorArray, 0, 0, 2}, 3778 {SetVectorArray, 0, 3, REGISTER_OUTPUT_SIZE / 4, 12, 3779 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 3780 0x41200123, 0x41300123}}, 3781 {SetMatrix, 0, 0, 0, 12, 3782 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 3783 0x41200123, 0x41300123}}, 3784 {SetMatrixArray}, 3785 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3786 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 3787 0x41200123, 0x41300123}}, 3788 {SetMatrixTranspose, 0, 0, 0, 12, 3789 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 3790 0x40800123, 0x41000123}}, 3791 {SetMatrixTransposeArray}, 3792 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3793 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 3794 0x40800123, 0x41000123}}, 3795 {SetMatrixPointerArray}, 3796 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3797 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 3798 0x41200123, 0x41300123}}, 3799 {SetMatrixTransposePointerArray}, 3800 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3801 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 3802 0x40800123, 0x41000123}}, 3803 }; 3804 3805 static const struct registerset_constants registerset_constants_row_int[] = 3806 { 3807 {"rn", {"rn", D3DXRS_INT4, 0, 6, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 78}, 3808 }; 3809 3810 static const struct registerset_test registerset_test_row_int[] = 3811 { 3812 {SetInt}, 3813 {SetBool}, 3814 {SetFloat}, 3815 {SetIntArray, 1, 0, 5}, 3816 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3817 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 3818 0x00000000, 0x00000007, 0x00000001}}, 3819 {SetBoolArray, 1, 0, 5}, 3820 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3821 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 3822 0x00000000, 0x00000001, 0x00000001}}, 3823 {SetFloatArray, 0, 0, 5}, 3824 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 12, 3825 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 3826 0x00000006, 0x00000007, 0x00000001}}, 3827 {SetValue, 1, 0, 23}, 3828 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 12, 3829 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 3830 0x00000000, 0x00000007, 0x00000001}}, 3831 {SetVector}, 3832 {SetVectorArray, 0, 0, 2}, 3833 {SetVectorArray, 0, 3, REGISTER_OUTPUT_SIZE / 4, 12, 3834 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 3835 0x0000000a, 0x0000000b, 0x00000001}}, 3836 {SetMatrix, 0, 0, 0, 12, 3837 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 3838 0x0000000a, 0x0000000b, 0x00000001}}, 3839 {SetMatrixArray}, 3840 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3841 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 3842 0x0000000a, 0x0000000b, 0x00000001}}, 3843 {SetMatrixTranspose, 0, 0, 0, 12, 3844 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 3845 0x00000004, 0x00000008, 0x00000001}}, 3846 {SetMatrixTransposeArray}, 3847 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3848 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 3849 0x00000004, 0x00000008, 0x00000001}}, 3850 {SetMatrixPointerArray}, 3851 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3852 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 3853 0x0000000a, 0x0000000b, 0x00000001}}, 3854 {SetMatrixTransposePointerArray}, 3855 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3856 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 3857 0x00000004, 0x00000008, 0x00000001}}, 3858 }; 3859 3860 static const struct registerset_constants registerset_constants_row_bool[] = 3861 { 3862 {"rb", {"rb", D3DXRS_BOOL, 0, 6, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 37}, 3863 }; 3864 3865 static const struct registerset_test registerset_test_row_bool[] = 3866 { 3867 {SetInt}, 3868 {SetBool}, 3869 {SetFloat}, 3870 {SetIntArray, 0, 0, 5,}, 3871 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 3872 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 3873 {SetBoolArray, 0, 0, 5}, 3874 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 3875 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 3876 {SetFloatArray, 0, 0, 5}, 3877 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 6, 3878 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3879 {SetValue, 0, 0, 23}, 3880 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 6, 3881 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 3882 {SetVector}, 3883 {SetVectorArray, 0, 0, 2}, 3884 {SetVectorArray, 0, 3, REGISTER_OUTPUT_SIZE / 4, 6, 3885 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3886 {SetMatrix, 0, 0, 0, 6, 3887 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001},}, 3888 {SetMatrixArray}, 3889 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3890 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3891 {SetMatrixTranspose, 0, 0, 0, 6, 3892 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3893 {SetMatrixTransposeArray}, 3894 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3895 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3896 {SetMatrixPointerArray}, 3897 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3898 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 3899 {SetMatrixTransposePointerArray}, 3900 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 3901 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 3902 }; 3903 3904 static const struct registerset_constants registerset_constants_row_int_float[] = 3905 { 3906 {"rnf", {"rnf", D3DXRS_FLOAT4, 6, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 91}, 3907 }; 3908 3909 static const struct registerset_test registerset_test_row_int_float[] = 3910 { 3911 {SetInt}, 3912 {SetBool}, 3913 {SetFloat}, 3914 {SetIntArray, 1, 0, 5}, 3915 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3916 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 3917 0x00000000, 0x40e00000}}, 3918 {SetBoolArray, 1, 0, 5}, 3919 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3920 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3921 0x00000000, 0x3f800000}}, 3922 {SetFloatArray, 0, 0, 5}, 3923 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 12, 3924 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 3925 0x40c00000, 0x40e00000}}, 3926 {SetValue, 1, 0, 23}, 3927 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 12, 3928 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 3929 0x00000000, 0x40e00000}}, 3930 {SetVector}, 3931 {SetVectorArray, 0, 0, 2}, 3932 {SetVectorArray, 0, 3, REGISTER_OUTPUT_SIZE / 4, 12, 3933 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 3934 0x41200000, 0x41300000}}, 3935 {SetMatrix, 0, 0, 0, 12, 3936 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 3937 0x41200000, 0x41300000}}, 3938 {SetMatrixArray}, 3939 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3940 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 3941 0x41200000, 0x41300000}}, 3942 {SetMatrixTranspose, 0, 0, 0, 12, 3943 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 3944 0x40800000, 0x41000000}}, 3945 {SetMatrixTransposeArray}, 3946 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3947 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 3948 0x40800000, 0x41000000}}, 3949 {SetMatrixPointerArray}, 3950 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3951 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 3952 0x41200000, 0x41300000}}, 3953 {SetMatrixTransposePointerArray}, 3954 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3955 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 3956 0x40800000, 0x41000000}}, 3957 }; 3958 3959 static const struct registerset_constants registerset_constants_row_bool_float[] = 3960 { 3961 {"rbf", {"rbf", D3DXRS_FLOAT4, 3, 3, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 44}, 3962 }; 3963 3964 static const struct registerset_test registerset_test_row_bool_float[] = 3965 { 3966 {SetInt}, 3967 {SetBool}, 3968 {SetFloat}, 3969 {SetIntArray, 1, 0, 5}, 3970 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3971 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3972 0x00000000, 0x3f800000}}, 3973 {SetBoolArray, 1, 0, 5}, 3974 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 12, 3975 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3976 0x00000000, 0x3f800000}}, 3977 {SetFloatArray, 0, 0, 5}, 3978 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 12, 3979 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3980 0x3f800000, 0x3f800000}}, 3981 {SetValue, 1, 0, 23}, 3982 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 12, 3983 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3984 0x00000000, 0x3f800000}}, 3985 {SetVector}, 3986 {SetVectorArray, 0, 0, 2}, 3987 {SetVectorArray, 0, 3, REGISTER_OUTPUT_SIZE / 4, 12, 3988 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3989 0x3f800000, 0x3f800000}}, 3990 {SetMatrix, 0, 0, 0, 12, 3991 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3992 0x3f800000, 0x3f800000}}, 3993 {SetMatrixArray}, 3994 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 3995 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 3996 0x3f800000, 0x3f800000}}, 3997 {SetMatrixTranspose, 0, 0, 0, 12, 3998 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 3999 0x3f800000, 0x3f800000}}, 4000 {SetMatrixTransposeArray}, 4001 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 4002 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4003 0x3f800000, 0x3f800000}}, 4004 {SetMatrixPointerArray}, 4005 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 4006 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4007 0x3f800000, 0x3f800000}}, 4008 {SetMatrixTransposePointerArray}, 4009 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 12, 4010 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4011 0x3f800000, 0x3f800000}}, 4012 }; 4013 4014 /* 4015 * fxc.exe /Tvs_3_0 4016 */ 4017 #if 0 4018 row_major bool3x2 rab[2] = {1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1}; 4019 row_major int3x2 ran[2] = {4, 5, 6, 1, 8, 1, 5, 3, 9, 6, 7, 3}; 4020 row_major float3x2 raf[2] = {1.5, 2.8, 3.3, 4.9, 5.9, 6.8, 7.9, 8.5, 9.4, 1.3, 1.2, 1.1}; 4021 row_major bool3x2 rabf[2] = {1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1}; 4022 row_major int3x2 ranf[2] = {35, 40, 60, 80, 70, 56, 37, 13, 98, 54, 77, 36}; 4023 float4 main(float4 pos : POSITION) : POSITION 4024 { 4025 float4 tmp = 0; 4026 int i; 4027 if (rab[1]._32) for (i = 0; i < ran[1]._31; i++) tmp.x += pos.z * raf[1]._31 * rabf[1]._32; 4028 else for (i = 0; i < ran[1]._32; i++) tmp.y += pos.y * raf[1]._32 * ranf[1]._32; 4029 return tmp; 4030 } 4031 #endif 4032 static const DWORD registerset_blob_row_array[] = 4033 { 4034 0xfffe0300, 0x00b6fffe, 0x42415443, 0x0000001c, 0x000002a3, 0xfffe0300, 0x00000005, 0x0000001c, 4035 0x00000100, 0x0000029c, 0x00000080, 0x00000000, 0x0000000c, 0x00000084, 0x00000094, 0x000000c4, 4036 0x00060002, 0x00000006, 0x000000cc, 0x000000dc, 0x0000013c, 0x00000002, 0x00000006, 0x00000140, 4037 0x00000150, 0x000001b0, 0x00000001, 0x0000000c, 0x000001b4, 0x000001c4, 0x00000224, 0x000c0002, 4038 0x00000006, 0x0000022c, 0x0000023c, 0x00626172, 0x00010002, 0x00020003, 0x00000002, 0x00000000, 4039 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 4040 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x66626172, 0xababab00, 0x00010002, 0x00020003, 4041 0x00000002, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 4042 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 4043 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 4044 0x00000000, 0x00000000, 0x00666172, 0x00030002, 0x00020003, 0x00000002, 0x00000000, 0x3fc00000, 4045 0x40333333, 0x00000000, 0x00000000, 0x40533333, 0x409ccccd, 0x00000000, 0x00000000, 0x40bccccd, 4046 0x40d9999a, 0x00000000, 0x00000000, 0x40fccccd, 0x41080000, 0x00000000, 0x00000000, 0x41166666, 4047 0x3fa66666, 0x00000000, 0x00000000, 0x3f99999a, 0x3f8ccccd, 0x00000000, 0x00000000, 0x006e6172, 4048 0x00020002, 0x00020003, 0x00000002, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4049 0x00000006, 0x00000001, 0x00000001, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000000, 4050 0x00000005, 0x00000003, 0x00000001, 0x00000000, 0x00000009, 0x00000006, 0x00000001, 0x00000000, 4051 0x00000007, 0x00000003, 0x00000001, 0x00000000, 0x666e6172, 0xababab00, 0x00020002, 0x00020003, 4052 0x00000002, 0x00000000, 0x420c0000, 0x42200000, 0x00000000, 0x00000000, 0x42700000, 0x42a00000, 4053 0x00000000, 0x00000000, 0x428c0000, 0x42600000, 0x00000000, 0x00000000, 0x42140000, 0x41500000, 4054 0x00000000, 0x00000000, 0x42c40000, 0x42580000, 0x00000000, 0x00000000, 0x429a0000, 0x42100000, 4055 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 4056 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 4057 0x05000051, 0xa00f0012, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 4058 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e4080b, 0x03000005, 0x80010000, 4059 0xa0000005, 0x90aa0000, 0x02000001, 0x80010001, 0xa0000012, 0x01000026, 0xf0e4000a, 0x04000004, 4060 0x80010001, 0x80000000, 0xa055000b, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa0000012, 4061 0x0000002a, 0x03000005, 0x80010000, 0xa0550005, 0x90550000, 0x02000001, 0x80020001, 0xa0000012, 4062 0x01000026, 0xf0e4000b, 0x04000004, 0x80020001, 0x80000000, 0xa0550011, 0x80550001, 0x00000027, 4063 0x02000001, 0x80010001, 0xa0000012, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 4064 0xe00c0000, 0xa0000012, 0x0000ffff, 4065 }; 4066 4067 static const struct registerset_constants registerset_constants_row_array_float[] = 4068 { 4069 {"raf", {"raf", D3DXRS_FLOAT4, 0, 6, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 2, 0, 48, NULL}, 84}, 4070 {"raf[0]", {"raf", D3DXRS_FLOAT4, 0, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 84}, 4071 {"raf[1]", {"raf", D3DXRS_FLOAT4, 3, 3, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 1, 0, 24, NULL}, 96}, 4072 }; 4073 4074 static const struct registerset_test registerset_test_row_array_float[] = 4075 { 4076 {SetInt}, 4077 {SetBool}, 4078 {SetFloat}, 4079 {SetIntArray, 1, 0, 5}, 4080 {SetIntArray, 1, 6, 11, 12, 4081 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4082 0x00000000, 0x40e00000}}, 4083 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4084 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4085 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 0x41000000, 0x41100000, 0x00000000, 0x00000000, 4086 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41400000, 0x41500000}}, 4087 {SetBoolArray, 1, 0, 5}, 4088 {SetBoolArray, 1, 6, 11, 12, 4089 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4090 0x00000000, 0x3f800000}}, 4091 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4092 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4093 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4094 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4095 {SetFloatArray, 0, 0, 5}, 4096 {SetFloatArray, 0, 6, 11, 12, 4097 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 4098 0x40c00123, 0x40e00123}}, 4099 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 24, 4100 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 4101 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 0x41000123, 0x41100123, 0x00000000, 0x00000000, 4102 0x41200123, 0x41300123, 0x00000000, 0x00000000, 0x41400123, 0x41500123}}, 4103 {SetValue, 0, 0, 23}, 4104 {SetValue, 0, 24, 47, 12, 4105 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 4106 0x40c00123, 0x40e00123}}, 4107 {SetValue, 0, 48, REGISTER_OUTPUT_SIZE * 4, 24, 4108 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000, 0x00000000, 4109 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 0x41000123, 0x41100123, 0x00000000, 0x00000000, 4110 0x41200123, 0x41300123, 0x00000000, 0x00000000, 0x41400123, 0x41500123}}, 4111 {SetVector}, 4112 {SetVectorArray, 0, 0, 2}, 4113 {SetVectorArray, 0, 3, 5, 12, 4114 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4115 0x41200123, 0x41300123}}, 4116 {SetVectorArray, 0, 6, REGISTER_OUTPUT_SIZE / 4, 24, 4117 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4118 0x41200123, 0x41300123, 0x00000000, 0x00000000, 0x41600123, 0x41700123, 0x00000000, 0x00000000, 4119 0x41a00123, 0x41b00123, 0x00000000, 0x00000000, 0x00000000, 0x41f00123}}, 4120 {SetMatrix, 0, 0, 0, 12, 4121 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4122 0x41200123, 0x41300123}}, 4123 {SetMatrixArray}, 4124 {SetMatrixArray, 0, 1, 1, 12, 4125 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4126 0x41200123, 0x41300123}}, 4127 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4128 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4129 0x41200123, 0x41300123, 0x00000000, 0x00000000, 0x41a00123, 0x41b00123, 0x00000000, 0x00000000, 4130 0x00000000, 0x41f00123, 0x00000000, 0x00000000, 0x00000000, 0x42300123}}, 4131 {SetMatrixTranspose, 0, 0, 0, 12, 4132 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 4133 0x40800123, 0x41000123}}, 4134 {SetMatrixTransposeArray}, 4135 {SetMatrixTransposeArray, 0, 1, 1, 12, 4136 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 4137 0x40800123, 0x41000123}}, 4138 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4139 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 4140 0x40800123, 0x41000123, 0x00000000, 0x00000000, 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 4141 0x41b00123, 0x41f00123, 0x00000000, 0x00000000, 0x41c00123, 0x42000123}}, 4142 {SetMatrixPointerArray}, 4143 {SetMatrixPointerArray, 0, 1, 1, 12, 4144 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4145 0x41200123, 0x41300123}}, 4146 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4147 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x40c00123, 0x40e00123, 0x00000000, 0x00000000, 4148 0x41200123, 0x41300123, 0x00000000, 0x00000000, 0x41900123, 0x41a00123, 0x00000000, 0x00000000, 4149 0x41d00123, 0x00000000, 0x00000000, 0x00000000, 0x42100123, 0x00000000}}, 4150 {SetMatrixTransposePointerArray}, 4151 {SetMatrixTransposePointerArray, 0, 1, 1, 12, 4152 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 4153 0x40800123, 0x41000123}}, 4154 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4155 {0x40000123, 0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x00000000, 0x00000000, 4156 0x40800123, 0x41000123, 0x00000000, 0x00000000, 0x41900123, 0x41d00123, 0x00000000, 0x00000000, 4157 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 0x41b00123, 0x41f00123}}, 4158 }; 4159 4160 static const struct registerset_constants registerset_constants_row_array_int[] = 4161 { 4162 {"ran", {"ran", D3DXRS_INT4, 0, 12, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 48, NULL}, 113}, 4163 {"ran[0]", {"ran", D3DXRS_INT4, 0, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 113}, 4164 {"ran[1]", {"ran", D3DXRS_INT4, 3, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 125}, 4165 }; 4166 4167 static const struct registerset_test registerset_test_row_array_int[] = 4168 { 4169 {SetInt}, 4170 {SetBool}, 4171 {SetFloat}, 4172 {SetIntArray, 1, 0, 5}, 4173 {SetIntArray, 1, 6, 11, 12, 4174 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4175 0x00000000, 0x00000007, 0x00000001}}, 4176 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4177 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4178 0x00000000, 0x00000007, 0x00000001, 0x00000000, 0x00000008, 0x00000009, 0x00000001, 0x00000000, 4179 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x0000000c, 0x0000000d, 0x00000001}}, 4180 {SetBoolArray, 1, 0, 5}, 4181 {SetBoolArray, 1, 6, 11, 12, 4182 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 4183 0x00000000, 0x00000001, 0x00000001}}, 4184 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4185 {0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 4186 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 4187 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 4188 {SetFloatArray, 0, 0, 5}, 4189 {SetFloatArray, 0, 6, 11, 12, 4190 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4191 0x00000006, 0x00000007, 0x00000001}}, 4192 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 24, 4193 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4194 0x00000006, 0x00000007, 0x00000001, 0x00000000, 0x00000008, 0x00000009, 0x00000001, 0x00000000, 4195 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x0000000c, 0x0000000d, 0x00000001}}, 4196 {SetValue, 1, 0, 23}, 4197 {SetValue, 1, 24, 47, 12, 4198 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4199 0x00000000, 0x00000007, 0x00000001}}, 4200 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 24, 4201 {0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 4202 0x00000000, 0x00000007, 0x00000001, 0x00000000, 0x00000008, 0x00000009, 0x00000001, 0x00000000, 4203 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x0000000c, 0x0000000d, 0x00000001}}, 4204 {SetVector}, 4205 {SetVectorArray, 0, 0, 2}, 4206 {SetVectorArray, 0, 3, 5, 12, 4207 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4208 0x0000000a, 0x0000000b, 0x00000001}}, 4209 {SetVectorArray, 0, 6, REGISTER_OUTPUT_SIZE / 4, 24, 4210 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4211 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x0000000e, 0x0000000f, 0x00000001, 0x00000000, 4212 0x00000014, 0x00000016, 0x00000001, 0x00000000, 0x00000000, 0x0000001e, 0x00000001}}, 4213 {SetMatrix, 0, 0, 0, 12, 4214 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4215 0x0000000a, 0x0000000b, 0x00000001}}, 4216 {SetMatrixArray}, 4217 {SetMatrixArray, 0, 1, 1, 12, 4218 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4219 0x0000000a, 0x0000000b, 0x00000001}}, 4220 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4221 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4222 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x00000014, 0x00000016, 0x00000001, 0x00000000, 4223 0x00000000, 0x0000001e, 0x00000001, 0x00000000, 0x00000000, 0x0000002c, 0x00000001}}, 4224 {SetMatrixTranspose, 0, 0, 0, 12, 4225 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 4226 0x00000004, 0x00000008, 0x00000001}}, 4227 {SetMatrixTransposeArray}, 4228 {SetMatrixTransposeArray, 0, 1, 1, 12, 4229 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 4230 0x00000004, 0x00000008, 0x00000001}}, 4231 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4232 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 4233 0x00000004, 0x00000008, 0x00000001, 0x00000000, 0x00000014, 0x00000000, 0x00000001, 0x00000000, 4234 0x00000016, 0x0000001e, 0x00000001, 0x00000000, 0x00000018, 0x00000020, 0x00000001}}, 4235 {SetMatrixPointerArray}, 4236 {SetMatrixPointerArray, 0, 1, 1, 12, 4237 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4238 0x0000000a, 0x0000000b, 0x00000001}}, 4239 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4240 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000006, 0x00000007, 0x00000001, 0x00000000, 4241 0x0000000a, 0x0000000b, 0x00000001, 0x00000000, 0x00000012, 0x00000014, 0x00000001, 0x00000000, 4242 0x0000001a, 0x00000000, 0x00000001, 0x00000000, 0x00000024, 0x00000000, 0x00000001}}, 4243 {SetMatrixTransposePointerArray}, 4244 {SetMatrixTransposePointerArray, 0, 1, 1, 12, 4245 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 4246 0x00000004, 0x00000008, 0x00000001}}, 4247 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4248 {0x00000002, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 4249 0x00000004, 0x00000008, 0x00000001, 0x00000000, 0x00000012, 0x0000001a, 0x00000001, 0x00000000, 4250 0x00000014, 0x00000000, 0x00000001, 0x00000000, 0x00000016, 0x0000001e, 0x00000001}}, 4251 }; 4252 4253 static const struct registerset_constants registerset_constants_row_array_bool[] = 4254 { 4255 {"rab", {"rab", D3DXRS_BOOL, 0, 12, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 2, 0, 48, NULL}, 37}, 4256 {"rab[0]", {"rab", D3DXRS_BOOL, 0, 6, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 37}, 4257 {"rab[1]", {"rab", D3DXRS_BOOL, 6, 6, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 43}, 4258 }; 4259 4260 static const struct registerset_test registerset_test_row_array_bool[] = 4261 { 4262 {SetInt}, 4263 {SetBool}, 4264 {SetFloat}, 4265 {SetIntArray, 1, 0, 5,}, 4266 {SetIntArray, 1, 6, 11, 6, 4267 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 4268 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 12, 4269 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 4270 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4271 {SetBoolArray, 1, 0, 5}, 4272 {SetBoolArray, 1, 6, 11, 6, 4273 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 4274 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 12, 4275 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 4276 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d}}, 4277 {SetFloatArray, 0, 0, 5}, 4278 {SetFloatArray, 0, 6, 11, 6, 4279 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4280 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 12, 4281 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 4282 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4283 {SetValue, 1, 0, 23}, 4284 {SetValue, 1, 24, 47, 6, 4285 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 4286 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 12, 4287 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 4288 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d}}, 4289 {SetVector}, 4290 {SetVectorArray, 0, 0, 2}, 4291 {SetVectorArray, 0, 3, 5, 6, 4292 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4293 {SetVectorArray, 0, 6, REGISTER_OUTPUT_SIZE / 4, 12, 4294 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 4295 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 4296 {SetMatrix, 0, 0, 0, 6, 4297 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4298 {SetMatrixArray}, 4299 {SetMatrixArray, 0, 1, 1, 6, 4300 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4301 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 4302 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 4303 0x00000000, 0x00000001, 0x00000000, 0x00000001}}, 4304 {SetMatrixTranspose, 0, 0, 0, 6, 4305 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 4306 {SetMatrixTransposeArray}, 4307 {SetMatrixTransposeArray, 0, 1, 1, 6, 4308 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 4309 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 4310 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 4311 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4312 {SetMatrixPointerArray}, 4313 {SetMatrixPointerArray, 0, 1, 1, 6, 4314 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4315 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 4316 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 4317 0x00000001, 0x00000000, 0x00000001, 0x00000000}}, 4318 {SetMatrixTransposePointerArray}, 4319 {SetMatrixTransposePointerArray, 0, 1, 1, 6, 4320 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 4321 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 12, 4322 {0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 4323 0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4324 }; 4325 4326 static const struct registerset_constants registerset_constants_row_array_int_float[] = 4327 { 4328 {"ranf", {"ranf", D3DXRS_FLOAT4, 12, 6, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 48, NULL}, 143}, 4329 {"ranf[0]", {"ranf", D3DXRS_FLOAT4, 12, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 143}, 4330 {"ranf[1]", {"ranf", D3DXRS_FLOAT4, 15, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 155}, 4331 }; 4332 4333 static const struct registerset_test registerset_test_row_array_int_float[] = 4334 { 4335 {SetInt}, 4336 {SetBool}, 4337 {SetFloat}, 4338 {SetIntArray, 1, 0, 5}, 4339 {SetIntArray, 1, 6, 11, 12, 4340 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4341 0x00000000, 0x40e00000,}}, 4342 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4343 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4344 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 0x41000000, 0x41100000, 0x00000000, 0x00000000, 4345 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41400000, 0x41500000}}, 4346 {SetBoolArray, 1, 0, 5}, 4347 {SetBoolArray, 1, 6, 11, 12, 4348 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4349 0x00000000, 0x3f800000}}, 4350 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4351 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4352 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4353 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4354 {SetFloatArray, 0, 0, 5}, 4355 {SetFloatArray, 0, 6, 11, 12, 4356 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4357 0x40c00000, 0x40e00000}}, 4358 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 24, 4359 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4360 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 0x41000000, 0x41100000, 0x00000000, 0x00000000, 4361 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41400000, 0x41500000}}, 4362 {SetValue, 1, 0, 23}, 4363 {SetValue, 1, 24, 47, 12, 4364 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4365 0x00000000, 0x40e00000}}, 4366 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 24, 4367 {0x40000000, 0x40400000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 4368 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 0x41000000, 0x41100000, 0x00000000, 0x00000000, 4369 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41400000, 0x41500000}}, 4370 {SetVector}, 4371 {SetVectorArray, 0, 0, 2}, 4372 {SetVectorArray, 0, 3, 5, 12, 4373 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4374 0x41200000, 0x41300000}}, 4375 {SetVectorArray, 0, 6, REGISTER_OUTPUT_SIZE / 4, 24, 4376 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4377 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41600000, 0x41700000, 0x00000000, 0x00000000, 4378 0x41a00000, 0x41b00000, 0x00000000, 0x00000000, 0x00000000, 0x41f00000}}, 4379 {SetMatrix, 0, 0, 0, 12, 4380 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4381 0x41200000, 0x41300000}}, 4382 {SetMatrixArray}, 4383 {SetMatrixArray, 0, 1, 1, 12, 4384 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4385 0x41200000, 0x41300000}}, 4386 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4387 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4388 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41a00000, 0x41b00000, 0x00000000, 0x00000000, 4389 0x00000000, 0x41f00000, 0x00000000, 0x00000000, 0x00000000, 0x42300000}}, 4390 {SetMatrixTranspose, 0, 0, 0, 12, 4391 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 4392 0x40800000, 0x41000000}}, 4393 {SetMatrixTransposeArray}, 4394 {SetMatrixTransposeArray, 0, 1, 1, 12, 4395 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 4396 0x40800000, 0x41000000}}, 4397 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4398 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 4399 0x40800000, 0x41000000, 0x00000000, 0x00000000, 0x41a00000, 0x00000000, 0x00000000, 0x00000000, 4400 0x41b00000, 0x41f00000, 0x00000000, 0x00000000, 0x41c00000, 0x42000000}}, 4401 {SetMatrixPointerArray}, 4402 {SetMatrixPointerArray, 0, 1, 1, 12, 4403 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4404 0x41200000, 0x41300000}}, 4405 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4406 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x40e00000, 0x00000000, 0x00000000, 4407 0x41200000, 0x41300000, 0x00000000, 0x00000000, 0x41900000, 0x41a00000, 0x00000000, 0x00000000, 4408 0x41d00000, 0x00000000, 0x00000000, 0x00000000, 0x42100000, 0x00000000}}, 4409 {SetMatrixTransposePointerArray}, 4410 {SetMatrixTransposePointerArray, 0, 1, 1, 12, 4411 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 4412 0x40800000, 0x41000000}}, 4413 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4414 {0x40000000, 0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x00000000, 0x00000000, 4415 0x40800000, 0x41000000, 0x00000000, 0x00000000, 0x41900000, 0x41d00000, 0x00000000, 0x00000000, 4416 0x41a00000, 0x00000000, 0x00000000, 0x00000000, 0x41b00000, 0x41f00000}}, 4417 }; 4418 4419 static const struct registerset_constants registerset_constants_row_array_bool_float[] = 4420 { 4421 {"rabf", {"rabf", D3DXRS_FLOAT4, 6, 6, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 2, 0, 48, NULL}, 55}, 4422 {"rabf[0]", {"rabf", D3DXRS_FLOAT4, 6, 3, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 55}, 4423 {"rabf[1]", {"rabf", D3DXRS_FLOAT4, 9, 3, D3DXPC_MATRIX_ROWS, D3DXPT_BOOL, 3, 2, 1, 0, 24, NULL}, 67}, 4424 }; 4425 4426 static const struct registerset_test registerset_test_row_array_bool_float[] = 4427 { 4428 {SetInt}, 4429 {SetBool}, 4430 {SetFloat}, 4431 {SetIntArray, 1, 0, 5}, 4432 {SetIntArray, 1, 6, 11, 12, 4433 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4434 0x00000000, 0x3f800000}}, 4435 {SetIntArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4436 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4437 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4438 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4439 {SetBoolArray, 1, 0, 5}, 4440 {SetBoolArray, 1, 6, 11, 12, 4441 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4442 0x00000000, 0x3f800000}}, 4443 {SetBoolArray, 1, 12, REGISTER_OUTPUT_SIZE, 24, 4444 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4445 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4446 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4447 {SetFloatArray, 0, 0, 5}, 4448 {SetFloatArray, 0, 6, 11, 12, 4449 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4450 0x3f800000, 0x3f800000}}, 4451 {SetFloatArray, 0, 12, REGISTER_OUTPUT_SIZE, 24, 4452 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4453 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4454 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4455 {SetValue, 1, 0, 23}, 4456 {SetValue, 1, 24, 47, 12, 4457 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4458 0x00000000, 0x3f800000}}, 4459 {SetValue, 1, 48, REGISTER_OUTPUT_SIZE * 4, 24, 4460 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4461 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4462 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4463 {SetVector}, 4464 {SetVectorArray, 0, 0, 2}, 4465 {SetVectorArray, 0, 3, 5, 12, 4466 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4467 0x3f800000, 0x3f800000}}, 4468 {SetVectorArray, 0, 6, REGISTER_OUTPUT_SIZE / 4, 24, 4469 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4470 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4471 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 4472 {SetMatrix, 0, 0, 0, 12, 4473 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4474 0x3f800000, 0x3f800000}}, 4475 {SetMatrixArray}, 4476 {SetMatrixArray, 0, 1, 1, 12, 4477 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4478 0x3f800000, 0x3f800000}}, 4479 {SetMatrixArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4480 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4481 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4482 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000}}, 4483 {SetMatrixTranspose, 0, 0, 0, 12, 4484 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4485 0x3f800000, 0x3f800000}}, 4486 {SetMatrixTransposeArray}, 4487 {SetMatrixTransposeArray, 0, 1, 1, 12, 4488 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4489 0x3f800000, 0x3f800000}}, 4490 {SetMatrixTransposeArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4491 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4492 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 4493 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4494 {SetMatrixPointerArray}, 4495 {SetMatrixPointerArray, 0, 1, 1, 12, 4496 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4497 0x3f800000, 0x3f800000}}, 4498 {SetMatrixPointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4499 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4500 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4501 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000}}, 4502 {SetMatrixTransposePointerArray}, 4503 {SetMatrixTransposePointerArray, 0, 1, 1, 12, 4504 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4505 0x3f800000, 0x3f800000}}, 4506 {SetMatrixTransposePointerArray, 0, 2, REGISTER_OUTPUT_SIZE / 16, 24, 4507 {0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 4508 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 4509 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000}}, 4510 }; 4511 4512 /* 4513 * fxc.exe /Tvs_3_0 4514 */ 4515 #if 0 4516 struct {bool b; bool3 vb;} sb = {1, 1, 0, 1}; 4517 struct {int n; int3 vn;} sn = {11, 12, 13, 14}; 4518 struct {float f; float3 vf;} sf = {1.1f, 2.2f, 3.3f, 4.4f}; 4519 struct {int nf; int3 vnf;} snf = {31, 32, 33, 34}; 4520 struct {bool bf; bool3 vbf;} sbf = {1, 0, 0, 1}; 4521 float4 main(float4 pos : POSITION) : POSITION 4522 { 4523 float4 tmp = 0; 4524 int i; 4525 if (sb.vb.z) for (i = 0; i < sn.n; i++) tmp.x += pos.z * sf.vf.x * snf.vnf.z; 4526 else for (i = 0; i < sn.vn.z; i++) tmp.y += pos.y * sf.vf.z * sbf.vbf.y; 4527 return tmp; 4528 } 4529 #endif 4530 static const DWORD registerset_blob_struct[] = 4531 { 4532 0xfffe0300, 0x00a2fffe, 0x42415443, 0x0000001c, 0x00000253, 0xfffe0300, 0x00000005, 0x0000001c, 4533 0x00000100, 0x0000024c, 0x00000080, 0x00000000, 0x00000004, 0x000000bc, 0x000000cc, 0x000000dc, 4534 0x00040002, 0x00000002, 0x000000f8, 0x00000108, 0x00000128, 0x00000002, 0x00000002, 0x00000164, 4535 0x00000174, 0x00000194, 0x00000001, 0x00000004, 0x000001d0, 0x000001e0, 0x00000200, 0x00020002, 4536 0x00000002, 0x0000021c, 0x0000022c, 0x62006273, 0xababab00, 0x00010000, 0x00010001, 0x00000001, 4537 0x00000000, 0xab006276, 0x00010001, 0x00030001, 0x00000001, 0x00000000, 0x00000083, 0x00000088, 4538 0x00000098, 0x0000009c, 0x00000005, 0x00040001, 0x00020001, 0x000000ac, 0xffffffff, 0xffffffff, 4539 0x00000000, 0xffffffff, 0x00666273, 0x76006662, 0xab006662, 0x000000e0, 0x00000088, 0x000000e3, 4540 0x0000009c, 0x00000005, 0x00040001, 0x00020001, 0x000000e8, 0x3f800000, 0x00000000, 0x00000000, 4541 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x66006673, 0xababab00, 0x00030000, 4542 0x00010001, 0x00000001, 0x00000000, 0xab006676, 0x00030001, 0x00030001, 0x00000001, 0x00000000, 4543 0x0000012b, 0x00000130, 0x00000140, 0x00000144, 0x00000005, 0x00040001, 0x00020001, 0x00000154, 4544 0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 0x400ccccd, 0x40533333, 0x408ccccd, 0x00000000, 4545 0x6e006e73, 0xababab00, 0x00020000, 0x00010001, 0x00000001, 0x00000000, 0xab006e76, 0x00020001, 4546 0x00030001, 0x00000001, 0x00000000, 0x00000197, 0x0000019c, 0x000001ac, 0x000001b0, 0x00000005, 4547 0x00040001, 0x00020001, 0x000001c0, 0x0000000b, 0x00000000, 0x00000001, 0x00000000, 0x0000000c, 4548 0x0000000d, 0x0000000e, 0x00000000, 0x00666e73, 0x7600666e, 0xab00666e, 0x00000204, 0x0000019c, 4549 0x00000207, 0x000001b0, 0x00000005, 0x00040001, 0x00020001, 0x0000020c, 0x41f80000, 0x00000000, 4550 0x00000000, 0x00000000, 0x42000000, 0x42040000, 0x42080000, 0x00000000, 0x335f7376, 0x4d00305f, 4551 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 4552 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x05000051, 0xa00f0006, 0x00000000, 0x00000000, 4553 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 4554 0x01000028, 0xe0e40803, 0x03000005, 0x80010000, 0xa0000001, 0x90aa0000, 0x02000001, 0x80010001, 4555 0xa0000006, 0x01000026, 0xf0e40000, 0x04000004, 0x80010001, 0x80000000, 0xa0aa0003, 0x80000001, 4556 0x00000027, 0x02000001, 0x80020001, 0xa0000006, 0x0000002a, 0x03000005, 0x80010000, 0xa0aa0001, 4557 0x90550000, 0x02000001, 0x80020001, 0xa0000006, 0x01000026, 0xf0e40003, 0x04000004, 0x80020001, 4558 0x80000000, 0xa0550005, 0x80550001, 0x00000027, 0x02000001, 0x80010001, 0xa0000006, 0x0000002b, 4559 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 0xe00c0000, 0xa0000006, 0x0000ffff, 4560 }; 4561 4562 static const struct registerset_constants registerset_constants_struct_float[] = 4563 { 4564 {"sf", {"sf", D3DXRS_FLOAT4, 0, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 93}, 4565 {"sf.f", {"f", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 93}, 4566 {"sf.vf", {"vf", D3DXRS_FLOAT4, 1, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 97}, 4567 }; 4568 4569 static const struct registerset_test registerset_test_struct_float[] = 4570 { 4571 {SetInt}, 4572 {SetBool}, 4573 {SetFloat}, 4574 {SetIntArray, 1, 0, 3}, 4575 {SetIntArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4576 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 4577 {SetBoolArray, 1, 0, 3}, 4578 {SetBoolArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4579 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4580 {SetFloatArray, 0, 0, 3}, 4581 {SetFloatArray, 0, 4, REGISTER_OUTPUT_SIZE, 8, 4582 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4583 {SetValue, 0, 0, 15}, 4584 {SetValue, 0, 16, REGISTER_OUTPUT_SIZE * 4, 8, 4585 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4586 {SetVector, 0, 0, 0, 8, 4587 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4588 {SetVectorArray}, 4589 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 4590 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4591 {SetMatrix, 0, 0, 0, 8, 4592 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4593 {SetMatrixArray}, 4594 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4595 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4596 {SetMatrixTranspose, 0, 0, 0, 8, 4597 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4598 {SetMatrixTransposeArray}, 4599 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4600 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4601 {SetMatrixPointerArray}, 4602 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4603 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4604 {SetMatrixTransposePointerArray}, 4605 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4606 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4607 }; 4608 4609 static const struct registerset_constants registerset_constants_struct_int[] = 4610 { 4611 {"sn", {"sn", D3DXRS_INT4, 0, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 120}, 4612 {"sn.n", {"n", D3DXRS_INT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 120}, 4613 {"sn.vn", {"vn", D3DXRS_INT4, 1, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 124}, 4614 }; 4615 4616 static const struct registerset_test registerset_test_struct_int[] = 4617 { 4618 {SetInt}, 4619 {SetBool}, 4620 {SetFloat}, 4621 {SetIntArray, 1, 0, 3}, 4622 {SetIntArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4623 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00000000}}, 4624 {SetBoolArray, 1, 0, 3}, 4625 {SetBoolArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4626 {0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000}}, 4627 {SetFloatArray, 0, 0, 3}, 4628 {SetFloatArray, 0, 4, REGISTER_OUTPUT_SIZE, 8, 4629 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4630 {SetValue, 1, 0, 15}, 4631 {SetValue, 1, 16, REGISTER_OUTPUT_SIZE * 4, 8, 4632 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00000000}}, 4633 {SetVector, 0, 0, 0, 8, 4634 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4635 {SetVectorArray}, 4636 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 4637 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4638 {SetMatrix, 0, 0, 0, 8, 4639 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4640 {SetMatrixArray}, 4641 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4642 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4643 {SetMatrixTranspose, 0, 0, 0, 8, 4644 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4645 {SetMatrixTransposeArray}, 4646 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4647 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4648 {SetMatrixPointerArray}, 4649 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4650 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4651 {SetMatrixTransposePointerArray}, 4652 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4653 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4654 }; 4655 4656 static const struct registerset_constants registerset_constants_struct_bool[] = 4657 { 4658 {"sb", {"sb", D3DXRS_BOOL, 0, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 51}, 4659 {"sb.b", {"b", D3DXRS_BOOL, 0, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 51}, 4660 {"sb.vb", {"vb", D3DXRS_BOOL, 1, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 52}, 4661 }; 4662 4663 static const struct registerset_test registerset_test_struct_bool[] = 4664 { 4665 {SetInt}, 4666 {SetBool}, 4667 {SetFloat}, 4668 {SetIntArray, 1, 0, 3}, 4669 {SetIntArray, 1, 4, REGISTER_OUTPUT_SIZE, 4, 4670 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4671 {SetBoolArray, 1, 0, 3}, 4672 {SetBoolArray, 1, 4, REGISTER_OUTPUT_SIZE, 4, 4673 {0x00000002, 0x00000003, 0x00000004, 0x00000005}}, 4674 {SetFloatArray, 0, 0, 3}, 4675 {SetFloatArray, 0, 4, REGISTER_OUTPUT_SIZE, 4, 4676 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4677 {SetValue, 1, 0, 15}, 4678 {SetValue, 1, 16, REGISTER_OUTPUT_SIZE * 4, 4, 4679 {0x00000002, 0x00000003, 0x00000004, 0x00000005}}, 4680 {SetVector, 0, 0, 0, 4, 4681 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4682 {SetVectorArray}, 4683 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 4, 4684 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4685 {SetMatrix, 0, 0, 0, 4, 4686 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4687 {SetMatrixArray}, 4688 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 4689 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4690 {SetMatrixTranspose, 0, 0, 0, 4, 4691 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4692 {SetMatrixTransposeArray}, 4693 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 4694 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4695 {SetMatrixPointerArray}, 4696 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 4697 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 4698 {SetMatrixTransposePointerArray}, 4699 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 4700 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4701 }; 4702 4703 static const struct registerset_constants registerset_constants_struct_int_float[] = 4704 { 4705 {"snf", {"snf", D3DXRS_FLOAT4, 2, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 139}, 4706 {"snf.nf", {"nf", D3DXRS_FLOAT4, 2, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 139}, 4707 {"snf.vnf", {"vnf", D3DXRS_FLOAT4, 3, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 143}, 4708 }; 4709 4710 static const struct registerset_test registerset_test_struct_int_float[] = 4711 { 4712 {SetInt}, 4713 {SetBool}, 4714 {SetFloat}, 4715 {SetIntArray, 1, 0, 3}, 4716 {SetIntArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4717 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 4718 {SetBoolArray, 1, 0, 3}, 4719 {SetBoolArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4720 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4721 {SetFloatArray, 0, 0, 3}, 4722 {SetFloatArray, 0, 4, REGISTER_OUTPUT_SIZE, 8, 4723 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 4724 {SetValue, 1, 0, 15}, 4725 {SetValue, 1, 16, REGISTER_OUTPUT_SIZE * 4, 8, 4726 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 4727 {SetVector, 0, 0, 0, 8, 4728 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 4729 {SetVectorArray}, 4730 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 4731 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 4732 {SetMatrix, 0, 0, 0, 8, 4733 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 4734 {SetMatrixArray}, 4735 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4736 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 4737 {SetMatrixTranspose, 0, 0, 0, 8, 4738 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4739 {SetMatrixTransposeArray}, 4740 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4741 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4742 {SetMatrixPointerArray}, 4743 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4744 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4745 {SetMatrixTransposePointerArray}, 4746 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4747 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4748 }; 4749 4750 static const struct registerset_constants registerset_constants_struct_bool_float[] = 4751 { 4752 {"sbf", {"sbf", D3DXRS_FLOAT4, 4, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 66}, 4753 {"sbf.bf", {"bf", D3DXRS_FLOAT4, 4, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 66}, 4754 {"sbf.vbf", {"vbf", D3DXRS_FLOAT4, 5, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 70}, 4755 }; 4756 4757 static const struct registerset_test registerset_test_struct_bool_float[] = 4758 { 4759 {SetInt}, 4760 {SetBool}, 4761 {SetFloat}, 4762 {SetIntArray, 1, 0, 3}, 4763 {SetIntArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4764 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4765 {SetBoolArray, 1, 0, 3}, 4766 {SetBoolArray, 1, 4, REGISTER_OUTPUT_SIZE, 8, 4767 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4768 {SetFloatArray, 0, 0, 3}, 4769 {SetFloatArray, 0, 4, REGISTER_OUTPUT_SIZE, 8, 4770 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 4771 {SetValue, 1, 0, 15}, 4772 {SetValue, 1, 16, REGISTER_OUTPUT_SIZE * 4, 8, 4773 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4774 {SetVector, 0, 0, 0, 8, 4775 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 4776 {SetVectorArray}, 4777 {SetVectorArray, 0, 1, REGISTER_OUTPUT_SIZE / 4, 8, 4778 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 4779 {SetMatrix, 0, 0, 0, 8, 4780 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 4781 {SetMatrixArray}, 4782 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4783 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 4784 {SetMatrixTranspose, 0, 0, 0, 8, 4785 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4786 {SetMatrixTransposeArray}, 4787 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4788 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4789 {SetMatrixPointerArray}, 4790 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4791 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4792 {SetMatrixTransposePointerArray}, 4793 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4794 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4795 }; 4796 4797 /* 4798 * fxc.exe /Tvs_3_0 4799 */ 4800 #if 0 4801 struct {bool b; bool3 vb;} sab[2] = {1, 1, 0, 1, 0, 1, 0, 1}; 4802 struct {int n; int3 vn;} san[2] = {21, 22, 23, 24, 25, 26, 27, 28}; 4803 struct {float f; float3 vf;} saf[2] = {1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f}; 4804 struct {int nf; int3 vnf;} sanf[2] = {41, 0, 43, 44, 41, 42, 43, 44}; 4805 struct {bool bf; bool3 vbf;} sabf[2] = {1, 0, 0, 1, 1, 1, 0, 1}; 4806 float4 main(float4 pos : POSITION) : POSITION 4807 { 4808 float4 tmp = 0; 4809 int i; 4810 if (sab[1].vb.z) for (i = 0; i < san[1].n; i++) tmp.x += pos.z * saf[1].vf.x * sanf[1].vnf.z; 4811 else for (i = 0; i < san[1].vn.z; i++) tmp.y += pos.y * saf[1].vf.z * sabf[1].vbf.y; 4812 return tmp; 4813 } 4814 #endif 4815 static const DWORD registerset_blob_struct_array[] = 4816 { 4817 0xfffe0300, 0x00c6fffe, 0x42415443, 0x0000001c, 0x000002e3, 0xfffe0300, 0x00000005, 0x0000001c, 4818 0x00000100, 0x000002dc, 0x00000080, 0x00000000, 0x00000008, 0x000000bc, 0x000000cc, 0x000000ec, 4819 0x00080002, 0x00000004, 0x00000108, 0x00000118, 0x00000158, 0x00000002, 0x00000004, 0x00000194, 4820 0x000001a4, 0x000001e4, 0x00000001, 0x00000008, 0x00000220, 0x00000230, 0x00000270, 0x00040002, 4821 0x00000004, 0x0000028c, 0x0000029c, 0x00626173, 0xabab0062, 0x00010000, 0x00010001, 0x00000001, 4822 0x00000000, 0xab006276, 0x00010001, 0x00030001, 0x00000001, 0x00000000, 0x00000084, 0x00000088, 4823 0x00000098, 0x0000009c, 0x00000005, 0x00040001, 0x00020002, 0x000000ac, 0xffffffff, 0xffffffff, 4824 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x66626173, 0x00666200, 4825 0x00666276, 0x000000f1, 0x00000088, 0x000000f4, 0x0000009c, 0x00000005, 0x00040001, 0x00020002, 4826 0x000000f8, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 4827 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 4828 0x00000000, 0x00666173, 0xabab0066, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0xab006676, 4829 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0x0000015c, 0x00000160, 0x00000170, 0x00000174, 4830 0x00000005, 0x00040001, 0x00020002, 0x00000184, 0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 4831 0x40066666, 0x40466666, 0x40833333, 0x00000000, 0x40a33333, 0x00000000, 0x00000000, 0x00000000, 4832 0x40c33333, 0x40e33333, 0x4101999a, 0x00000000, 0x006e6173, 0xabab006e, 0x00020000, 0x00010001, 4833 0x00000001, 0x00000000, 0xab006e76, 0x00020001, 0x00030001, 0x00000001, 0x00000000, 0x000001e8, 4834 0x000001ec, 0x000001fc, 0x00000200, 0x00000005, 0x00040001, 0x00020002, 0x00000210, 0x00000015, 4835 0x00000000, 0x00000001, 0x00000000, 0x00000016, 0x00000017, 0x00000018, 0x00000000, 0x00000019, 4836 0x00000000, 0x00000001, 0x00000000, 0x0000001a, 0x0000001b, 0x0000001c, 0x00000000, 0x666e6173, 4837 0x00666e00, 0x00666e76, 0x00000275, 0x000001ec, 0x00000278, 0x00000200, 0x00000005, 0x00040001, 4838 0x00020002, 0x0000027c, 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x422c0000, 4839 0x42300000, 0x00000000, 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x42280000, 0x422c0000, 4840 0x42300000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 4841 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 4842 0x05000051, 0xa00f000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 4843 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x01000028, 0xe0e40807, 0x03000005, 0x80010000, 4844 0xa0000003, 0x90aa0000, 0x02000001, 0x80010001, 0xa000000c, 0x01000026, 0xf0e40004, 0x04000004, 4845 0x80010001, 0x80000000, 0xa0aa0007, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa000000c, 4846 0x0000002a, 0x03000005, 0x80010000, 0xa0aa0003, 0x90550000, 0x02000001, 0x80020001, 0xa000000c, 4847 0x01000026, 0xf0e40007, 0x04000004, 0x80020001, 0x80000000, 0xa055000b, 0x80550001, 0x00000027, 4848 0x02000001, 0x80010001, 0xa000000c, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 4849 0xe00c0000, 0xa000000c, 0x0000ffff, 4850 }; 4851 4852 static const struct registerset_constants registerset_constants_struct_array_float[] = 4853 { 4854 {"saf", {"saf", D3DXRS_FLOAT4, 0, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 2, 2, 32, NULL}, 105}, 4855 {"saf[0]", {"saf", D3DXRS_FLOAT4, 0, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 105}, 4856 {"saf[0].f", {"f", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 105}, 4857 {"saf[0].vf", {"vf", D3DXRS_FLOAT4, 1, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 109}, 4858 {"saf[1]", {"saf", D3DXRS_FLOAT4, 2, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 113}, 4859 {"saf[1].f", {"f", D3DXRS_FLOAT4, 2, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 113}, 4860 {"saf[1].vf", {"vf", D3DXRS_FLOAT4, 3, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 117}, 4861 }; 4862 4863 static const struct registerset_test registerset_test_struct_array_float[] = 4864 { 4865 {SetInt}, 4866 {SetBool}, 4867 {SetFloat}, 4868 {SetIntArray, 1, 0, 3}, 4869 {SetIntArray, 1, 4, 7, 8, 4870 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 4871 {SetIntArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 4872 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 4873 {SetBoolArray, 1, 0, 3}, 4874 {SetBoolArray, 1, 4, 7, 8, 4875 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4876 {SetBoolArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 4877 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 4878 {SetFloatArray, 0, 0, 3}, 4879 {SetFloatArray, 0, 4, 7, 8, 4880 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4881 {SetFloatArray, 0, 8, REGISTER_OUTPUT_SIZE, 8, 4882 {0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x41000123, 0x41100123, 0x00000000}}, 4883 {SetValue, 0, 0, 15}, 4884 {SetValue, 0, 16, 31, 8, 4885 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4886 {SetValue, 0, 32, REGISTER_OUTPUT_SIZE * 4, 8, 4887 {0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x41000123, 0x41100123, 0x00000000}}, 4888 {SetVector, 0, 0, 0, 8, 4889 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4890 {SetVectorArray}, 4891 {SetVectorArray, 0, 1, 1, 8, 4892 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800123, 0x40a00123, 0x00000000}}, 4893 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 4894 {0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x41000123, 0x41100123, 0x00000000}}, 4895 {SetMatrix, 0, 0, 0, 8, 4896 {0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x41000123, 0x41100123, 0x00000000}}, 4897 {SetMatrixArray}, 4898 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4899 {0x40c00123, 0x00000000, 0x00000000, 0x00000000, 0x40e00123, 0x41000123, 0x41100123, 0x00000000}}, 4900 {SetMatrixTranspose, 0, 0, 0, 8, 4901 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4902 {SetMatrixTransposeArray}, 4903 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4904 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4905 {SetMatrixPointerArray}, 4906 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 4907 {SetMatrixTransposePointerArray}, 4908 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 4909 }; 4910 4911 static const struct registerset_constants registerset_constants_struct_array_int[] = 4912 { 4913 {"san", {"san", D3DXRS_INT4, 0, 8, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 2, 2, 32, NULL}, 140}, 4914 {"san[0]", {"san", D3DXRS_INT4, 0, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 140}, 4915 {"san[0].n", {"n", D3DXRS_INT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 140}, 4916 {"san[0].vn", {"vn", D3DXRS_INT4, 1, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 144}, 4917 {"san[1]", {"san", D3DXRS_INT4, 2, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 148}, 4918 {"san[1].n", {"n", D3DXRS_INT4, 2, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 148}, 4919 {"san[1].vn", {"vn", D3DXRS_INT4, 3, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 152}, 4920 }; 4921 4922 static const struct registerset_test registerset_test_struct_array_int[] = 4923 { 4924 {SetInt}, 4925 {SetBool}, 4926 {SetFloat}, 4927 {SetIntArray, 1, 0, 3}, 4928 {SetIntArray, 1, 4, 7, 8, 4929 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00000000}}, 4930 {SetIntArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 4931 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000}}, 4932 {SetBoolArray, 1, 0, 3}, 4933 {SetBoolArray, 1, 4, 7, 8, 4934 {0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000}}, 4935 {SetBoolArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 4936 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000}}, 4937 {SetFloatArray, 0, 0, 3}, 4938 {SetFloatArray, 0, 4, 7, 8, 4939 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4940 {SetFloatArray, 0, 8, REGISTER_OUTPUT_SIZE, 8, 4941 {0x00000006, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000}}, 4942 {SetValue, 1, 0, 15}, 4943 {SetValue, 1, 16, 31, 8, 4944 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00000000}}, 4945 {SetValue, 1, 32, REGISTER_OUTPUT_SIZE * 4, 8, 4946 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000}}, 4947 {SetVector, 0, 0, 0, 8, 4948 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4949 {SetVectorArray}, 4950 {SetVectorArray, 0, 1, 1, 8, 4951 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000004, 0x00000005, 0x00000000}}, 4952 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 4953 {0x00000006, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000}}, 4954 {SetMatrix, 0, 0, 0, 8, 4955 {0x00000006, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000},}, 4956 {SetMatrixArray}, 4957 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4958 {0x00000006, 0x00000000, 0x00000001, 0x00000000, 0x00000007, 0x00000008, 0x00000009, 0x00000000}}, 4959 {SetMatrixTranspose, 0, 0, 0, 8, 4960 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4961 {SetMatrixTransposeArray}, 4962 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4963 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4964 {SetMatrixPointerArray}, 4965 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4966 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4967 {SetMatrixTransposePointerArray}, 4968 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 4969 {0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 4970 }; 4971 4972 static const struct registerset_constants registerset_constants_struct_array_bool[] = 4973 { 4974 {"sab", {"sab", D3DXRS_BOOL, 0, 8, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 2, 2, 32, NULL}, 51}, 4975 {"sab[0]", {"sab", D3DXRS_BOOL, 0, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 51}, 4976 {"sab[0].b", {"b", D3DXRS_BOOL, 0, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 51}, 4977 {"sab[0].vb", {"vb", D3DXRS_BOOL, 1, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 52}, 4978 {"sab[1]", {"sab", D3DXRS_BOOL, 4, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 55}, 4979 {"sab[1].b", {"b", D3DXRS_BOOL, 4, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 55}, 4980 {"sab[1].vb", {"vb", D3DXRS_BOOL, 5, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 56}, 4981 }; 4982 4983 static const struct registerset_test registerset_test_struct_array_bool[] = 4984 { 4985 {SetInt}, 4986 {SetBool}, 4987 {SetFloat}, 4988 {SetIntArray, 1, 0, 3}, 4989 {SetIntArray, 1, 4, 7, 4, 4990 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 4991 {SetIntArray, 1, 8, REGISTER_OUTPUT_SIZE, 4, 4992 {0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 4993 {SetBoolArray, 1, 0, 3}, 4994 {SetBoolArray, 1, 4, 7, 4, 4995 {0x00000002, 0x00000003, 0x00000004, 0x00000005}}, 4996 {SetBoolArray, 1, 8, REGISTER_OUTPUT_SIZE, 4, 4997 {0x00000000, 0x00000007, 0x00000008, 0x00000009}}, 4998 {SetFloatArray, 0, 0, 3}, 4999 {SetFloatArray, 0, 4, 7, 4, 5000 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 5001 {SetFloatArray, 0, 8, REGISTER_OUTPUT_SIZE, 4, 5002 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5003 {SetValue, 1, 0, 15}, 5004 {SetValue, 1, 16, 31, 4, 5005 {0x00000002, 0x00000003, 0x00000004, 0x00000005}}, 5006 {SetValue, 1, 32, REGISTER_OUTPUT_SIZE * 4, 4, 5007 {0x00000000, 0x00000007, 0x00000008, 0x00000009}}, 5008 {SetVector, 0, 0, 0, 4, 5009 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 5010 {SetVectorArray}, 5011 {SetVectorArray, 0, 1, 1, 4, 5012 {0x00000001, 0x00000000, 0x00000001, 0x00000001}}, 5013 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 4, 5014 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5015 {SetMatrix, 0, 0, 0, 4, 5016 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5017 {SetMatrixArray}, 5018 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 5019 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5020 {SetMatrixTranspose, 0, 0, 0, 4, 5021 {0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 5022 {SetMatrixTransposeArray}, 5023 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 5024 {0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 5025 {SetMatrixPointerArray}, 5026 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 5027 {0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5028 {SetMatrixTransposePointerArray}, 5029 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 4, 5030 {0x00000000, 0x00000001, 0x00000001, 0x00000001}}, 5031 }; 5032 5033 static const struct registerset_constants registerset_constants_struct_array_int_float[] = 5034 { 5035 {"sanf", {"sanf", D3DXRS_FLOAT4, 4, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 2, 2, 32, NULL}, 167}, 5036 {"sanf[0]", {"sanf", D3DXRS_FLOAT4, 4, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 167}, 5037 {"sanf[0].nf", {"nf", D3DXRS_FLOAT4, 4, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 167}, 5038 {"sanf[0].vnf", {"vnf", D3DXRS_FLOAT4, 5, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 171}, 5039 {"sanf[1]", {"sanf", D3DXRS_FLOAT4, 6, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 175}, 5040 {"sanf[1].nf", {"nf", D3DXRS_FLOAT4, 6, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 175}, 5041 {"sanf[1].vnf", {"vnf", D3DXRS_FLOAT4, 7, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 179}, 5042 }; 5043 5044 static const struct registerset_test registerset_test_struct_array_int_float[] = 5045 { 5046 {SetInt}, 5047 {SetBool}, 5048 {SetFloat}, 5049 {SetIntArray, 1, 0, 3}, 5050 {SetIntArray, 1, 4, 7, 8, 5051 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 5052 {SetIntArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 5053 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5054 {SetBoolArray, 1, 0, 3}, 5055 {SetBoolArray, 1, 4, 7, 8, 5056 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5057 {SetBoolArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 5058 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5059 {SetFloatArray, 0, 0, 3}, 5060 {SetFloatArray, 0, 4, 7, 8, 5061 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 5062 {SetFloatArray, 0, 8, REGISTER_OUTPUT_SIZE, 8, 5063 {0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5064 {SetValue, 1, 0, 15}, 5065 {SetValue, 1, 16, 31, 8, 5066 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x40800000, 0x40a00000, 0x00000000}}, 5067 {SetValue, 1, 32, REGISTER_OUTPUT_SIZE * 4, 8, 5068 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5069 {SetVector, 0, 0, 0, 8, 5070 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 5071 {SetVectorArray}, 5072 {SetVectorArray, 0, 1, 1, 8, 5073 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40800000, 0x40a00000, 0x00000000}}, 5074 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 5075 {0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5076 {SetMatrix, 0, 0, 0, 8, 5077 {0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5078 {SetMatrixArray}, 5079 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 5080 {0x40c00000, 0x00000000, 0x00000000, 0x00000000, 0x40e00000, 0x41000000, 0x41100000, 0x00000000}}, 5081 {SetMatrixTranspose, 0, 0, 0, 8, 5082 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 5083 {SetMatrixTransposeArray}, 5084 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 5085 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 5086 {SetMatrixPointerArray}, 5087 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 5088 {SetMatrixTransposePointerArray}, 5089 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 5090 }; 5091 5092 static const struct registerset_constants registerset_constants_struct_array_bool_float[] = 5093 { 5094 {"sabf", {"sabf", D3DXRS_FLOAT4, 8, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 2, 2, 32, NULL}, 70}, 5095 {"sabf[0]", {"sabf", D3DXRS_FLOAT4, 8, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 70}, 5096 {"sabf[0].bf", {"bf", D3DXRS_FLOAT4, 8, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 70}, 5097 {"sabf[0].vbf", {"vbf", D3DXRS_FLOAT4, 9, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 74}, 5098 {"sabf[1]", {"sabf", D3DXRS_FLOAT4, 10, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 78}, 5099 {"sabf[1].bf", {"bf", D3DXRS_FLOAT4, 10, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 78}, 5100 {"sabf[1].vbf", {"vbf", D3DXRS_FLOAT4, 11, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 82}, 5101 }; 5102 5103 static const struct registerset_test registerset_test_struct_array_bool_float[] = 5104 { 5105 {SetInt}, 5106 {SetBool}, 5107 {SetFloat}, 5108 {SetIntArray, 1, 0, 3}, 5109 {SetIntArray, 1, 4, 7, 8, 5110 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5111 {SetIntArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 5112 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5113 {SetBoolArray, 1, 0, 3}, 5114 {SetBoolArray, 1, 4, 7, 8, 5115 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5116 {SetBoolArray, 1, 8, REGISTER_OUTPUT_SIZE, 8, 5117 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5118 {SetFloatArray, 0, 0, 3}, 5119 {SetFloatArray, 0, 4, 7, 8, 5120 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 5121 {SetFloatArray, 0, 8, REGISTER_OUTPUT_SIZE, 8, 5122 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5123 {SetValue, 1, 0, 15}, 5124 {SetValue, 1, 16, 31, 8, 5125 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5126 {SetValue, 1, 32, REGISTER_OUTPUT_SIZE * 4, 8, 5127 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5128 {SetVector, 0, 0, 0, 8, 5129 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 5130 {SetVectorArray}, 5131 {SetVectorArray, 0, 1, 1, 8, 5132 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000}}, 5133 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 8, 5134 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5135 {SetMatrix, 0, 0, 0, 8, 5136 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5137 {SetMatrixArray}, 5138 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 5139 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}}, 5140 {SetMatrixTranspose, 0, 0, 0, 8, 5141 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 5142 {SetMatrixTransposeArray}, 5143 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8, 5144 {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, 5145 {SetMatrixPointerArray}, 5146 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 5147 {SetMatrixTransposePointerArray}, 5148 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 8}, 5149 }; 5150 5151 /* 5152 * fxc.exe /Tvs_3_0 5153 */ 5154 #if 0 5155 struct {bool b; struct {bool b; bool3 vb;} s; bool b1;} ssb = {1, 1, 0, 1, 1, 0}; 5156 struct {int n; struct {int n; int3 vn;} s; int n1;} ssn = {71, 72, 73, 74, 75, 76}; 5157 struct {float f; struct {float f; float3 vf;} s; float f1;} ssf = {1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f}; 5158 struct {int nf; struct {int nf; int3 vnf;} s; int nf1;} ssnf = {41, 0, 43, 44, 41, 42}; 5159 struct {bool bf; struct {bool bf; bool3 vbf;} s; bool bf1;} ssbf = {1, 0, 0, 1, 1, 0}; 5160 float4 main(float4 pos : POSITION) : POSITION 5161 { 5162 float4 tmp = 0; 5163 int i; 5164 if (ssb.b1) for (i = 0; i < ssn.n1; i++) tmp.x += pos.z * ssf.f1 * ssnf.nf1; 5165 else for (i = 0; i < ssn.s.vn.z; i++) tmp.y += pos.y * ssf.s.vf.z * ssbf.bf1; 5166 return tmp; 5167 } 5168 #endif 5169 static const DWORD registerset_blob_struct_struct[] = 5170 { 5171 0xfffe0300, 0x00fcfffe, 0x42415443, 0x0000001c, 0x000003bb, 0xfffe0300, 0x00000005, 0x0000001c, 5172 0x00000100, 0x000003b4, 0x00000080, 0x00000000, 0x00000006, 0x000000ec, 0x000000fc, 0x00000114, 5173 0x00080002, 0x00000004, 0x0000015c, 0x0000016c, 0x000001ac, 0x00000002, 0x00000004, 0x00000214, 5174 0x00000224, 0x00000264, 0x00000001, 0x00000006, 0x000002cc, 0x000002dc, 0x0000031c, 0x00040002, 5175 0x00000004, 0x00000364, 0x00000374, 0x00627373, 0xabab0062, 0x00010000, 0x00010001, 0x00000001, 5176 0x00000000, 0x62760073, 0xababab00, 0x00010001, 0x00030001, 0x00000001, 0x00000000, 0x00000084, 5177 0x00000088, 0x0000009a, 0x000000a0, 0x00000005, 0x00040001, 0x00020001, 0x000000b0, 0xab003162, 5178 0x00000084, 0x00000088, 0x00000098, 0x000000c0, 0x000000d0, 0x00000088, 0x00000005, 0x00060001, 5179 0x00030001, 0x000000d4, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 5180 0x66627373, 0x00666200, 0x00666276, 0x00000119, 0x00000088, 0x0000011c, 0x000000a0, 0x00000005, 5181 0x00040001, 0x00020001, 0x00000120, 0x00316662, 0x00000119, 0x00000088, 0x00000098, 0x00000130, 5182 0x00000140, 0x00000088, 0x00000005, 0x00060001, 0x00030001, 0x00000144, 0x3f800000, 0x00000000, 5183 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 5184 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00667373, 0xabab0066, 5185 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0xab006676, 0x00030001, 0x00030001, 0x00000001, 5186 0x00000000, 0x000001b0, 0x000001b4, 0x000001c4, 0x000001c8, 0x00000005, 0x00040001, 0x00020001, 5187 0x000001d8, 0xab003166, 0x000001b0, 0x000001b4, 0x00000098, 0x000001e8, 0x000001f8, 0x000001b4, 5188 0x00000005, 0x00060001, 0x00030001, 0x000001fc, 0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 5189 0x40066666, 0x00000000, 0x00000000, 0x00000000, 0x40466666, 0x40833333, 0x40a33333, 0x00000000, 5190 0x40c33333, 0x00000000, 0x00000000, 0x00000000, 0x006e7373, 0xabab006e, 0x00020000, 0x00010001, 5191 0x00000001, 0x00000000, 0xab006e76, 0x00020001, 0x00030001, 0x00000001, 0x00000000, 0x00000268, 5192 0x0000026c, 0x0000027c, 0x00000280, 0x00000005, 0x00040001, 0x00020001, 0x00000290, 0xab00316e, 5193 0x00000268, 0x0000026c, 0x00000098, 0x000002a0, 0x000002b0, 0x0000026c, 0x00000005, 0x00060001, 5194 0x00030001, 0x000002b4, 0x00000047, 0x00000000, 0x00000001, 0x00000000, 0x00000048, 0x00000000, 5195 0x00000001, 0x00000000, 0x00000049, 0x0000004a, 0x0000004b, 0x00000000, 0x0000004c, 0x00000000, 5196 0x00000001, 0x00000000, 0x666e7373, 0x00666e00, 0x00666e76, 0x00000321, 0x0000026c, 0x00000324, 5197 0x00000280, 0x00000005, 0x00040001, 0x00020001, 0x00000328, 0x0031666e, 0x00000321, 0x0000026c, 5198 0x00000098, 0x00000338, 0x00000348, 0x0000026c, 0x00000005, 0x00060001, 0x00030001, 0x0000034c, 5199 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5200 0x422c0000, 0x42300000, 0x42240000, 0x00000000, 0x42280000, 0x00000000, 0x00000000, 0x00000000, 5201 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 5202 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x05000051, 0xa00f000c, 5203 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 5204 0x80000000, 0xe00f0000, 0x01000028, 0xe0e40805, 0x03000005, 0x80010000, 0xa0000003, 0x90aa0000, 5205 0x02000001, 0x80010001, 0xa000000c, 0x01000026, 0xf0e40005, 0x04000004, 0x80010001, 0x80000000, 5206 0xa0000007, 0x80000001, 0x00000027, 0x02000001, 0x80020001, 0xa000000c, 0x0000002a, 0x03000005, 5207 0x80010000, 0xa0aa0002, 0x90550000, 0x02000001, 0x80020001, 0xa000000c, 0x01000026, 0xf0e40004, 5208 0x04000004, 0x80020001, 0x80000000, 0xa000000b, 0x80550001, 0x00000027, 0x02000001, 0x80010001, 5209 0xa000000c, 0x0000002b, 0x02000001, 0xe0030000, 0x80e40001, 0x02000001, 0xe00c0000, 0xa000000c, 5210 0x0000ffff, 5211 }; 5212 5213 static const struct registerset_constants registerset_constants_struct_struct_float[] = 5214 { 5215 {"ssf", {"ssf", D3DXRS_FLOAT4, 0, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 6, 1, 3, 24, NULL}, 137}, 5216 {"ssf.f", {"f", D3DXRS_FLOAT4, 0, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 137}, 5217 {"ssf.s", {"s", D3DXRS_FLOAT4, 1, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 141}, 5218 {"ssf.s.f", {"f", D3DXRS_FLOAT4, 1, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 141}, 5219 {"ssf.s.vf", {"vf", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 145}, 5220 {"ssf.f1", {"f1", D3DXRS_FLOAT4, 3, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 149}, 5221 }; 5222 5223 static const struct registerset_test registerset_test_struct_struct_float[] = 5224 { 5225 {SetInt}, 5226 {SetBool}, 5227 {SetFloat}, 5228 {SetIntArray, 1, 0, 5}, 5229 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5230 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x00000000, 0x00000000, 0x00000000, 5231 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 0x40e00000}}, 5232 {SetBoolArray, 1, 0, 5}, 5233 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5234 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 5235 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000}}, 5236 {SetFloatArray, 0, 0, 5}, 5237 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 16, 5238 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5239 0x40800123, 0x40a00123, 0x40c00123, 0x00000000, 0x40e00123}}, 5240 {SetValue, 0, 0, 23}, 5241 {SetValue, 0, 24, REGISTER_OUTPUT_SIZE * 4, 16, 5242 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5243 0x40800123, 0x40a00123, 0x40c00123, 0x00000000, 0x40e00123}}, 5244 {SetVector}, 5245 {SetVectorArray, 0, 0, 1}, 5246 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 16, 5247 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5248 0x40800123, 0x40a00123, 0x40c00123, 0x00000000, 0x40e00123}}, 5249 {SetMatrix, 0, 0, 0, 16, 5250 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5251 0x40800123, 0x40a00123, 0x40c00123, 0x00000000, 0x40e00123}}, 5252 {SetMatrixArray}, 5253 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5254 {0x40000123, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5255 0x40800123, 0x40a00123, 0x40c00123, 0x00000000, 0x40e00123}}, 5256 {SetMatrixTranspose, 0, 0, 0, 16, {0x40000123}}, 5257 {SetMatrixTransposeArray}, 5258 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000123}}, 5259 {SetMatrixPointerArray}, 5260 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000123}}, 5261 {SetMatrixTransposePointerArray}, 5262 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000123}}, 5263 }; 5264 5265 static const struct registerset_constants registerset_constants_struct_struct_int[] = 5266 { 5267 {"ssn", {"ssn", D3DXRS_INT4, 0, 6, D3DXPC_STRUCT, D3DXPT_VOID, 1, 6, 1, 3, 24, NULL}, 183}, 5268 {"ssn.n", {"n", D3DXRS_INT4, 0, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 183}, 5269 {"ssn.s", {"s", D3DXRS_INT4, 1, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 187}, 5270 {"ssn.s.n", {"n", D3DXRS_INT4, 1, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 187}, 5271 {"ssn.s.vn", {"vn", D3DXRS_INT4, 2, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 191}, 5272 {"ssn.n1", {"n1", D3DXRS_INT4, 3, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 195}, 5273 }; 5274 5275 static const struct registerset_test registerset_test_struct_struct_int[] = 5276 { 5277 {SetInt}, 5278 {SetBool}, 5279 {SetFloat}, 5280 {SetIntArray, 1, 0, 5}, 5281 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5282 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000000, 0x00000001, 0x00000000, 5283 0x00000004, 0x00000005, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5284 {SetBoolArray, 1, 0, 5}, 5285 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5286 {0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 5287 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001}}, 5288 {SetFloatArray, 0, 0, 5}, 5289 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 16, 5290 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5291 0x00000004, 0x00000005, 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5292 {SetValue, 1, 0, 23}, 5293 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 16, 5294 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000003, 0x00000000, 0x00000001, 0x00000000, 5295 0x00000004, 0x00000005, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5296 {SetVector}, 5297 {SetVectorArray, 0, 0, 1}, 5298 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 16, 5299 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5300 0x00000004, 0x00000005, 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5301 {SetMatrix, 0, 0, 0, 16, 5302 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5303 0x00000004, 0x00000005, 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5304 {SetMatrixArray}, 5305 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5306 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5307 0x00000004, 0x00000005, 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000001}}, 5308 {SetMatrixTranspose, 0, 0, 0, 16, 5309 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5310 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 5311 {SetMatrixTransposeArray}, 5312 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5313 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5314 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 5315 {SetMatrixPointerArray}, 5316 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5317 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5318 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 5319 {SetMatrixTransposePointerArray}, 5320 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5321 {0x00000002, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 5322 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001}}, 5323 }; 5324 5325 static const struct registerset_constants registerset_constants_struct_struct_bool[] = 5326 { 5327 {"ssb", {"ssb", D3DXRS_BOOL, 0, 6, D3DXPC_STRUCT, D3DXPT_VOID, 1, 6, 1, 3, 24, NULL}, 63}, 5328 {"ssb.b", {"b", D3DXRS_BOOL, 0, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 63}, 5329 {"ssb.s", {"s", D3DXRS_BOOL, 1, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 64}, 5330 {"ssb.s.b", {"b", D3DXRS_BOOL, 1, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 64}, 5331 {"ssb.s.vb", {"vb", D3DXRS_BOOL, 2, 3, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 65}, 5332 {"ssb.b1", {"b1", D3DXRS_BOOL, 5, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 68}, 5333 }; 5334 5335 static const struct registerset_test registerset_test_struct_struct_bool[] = 5336 { 5337 {SetInt}, 5338 {SetBool}, 5339 {SetFloat}, 5340 {SetIntArray, 1, 0, 5}, 5341 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 5342 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 5343 {SetBoolArray, 1, 0, 5}, 5344 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 6, 5345 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 5346 {SetFloatArray, 0, 0, 5}, 5347 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 6, 5348 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5349 {SetValue, 1, 0, 23}, 5350 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 6, 5351 {0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000000, 0x00000007}}, 5352 {SetVector}, 5353 {SetVectorArray, 0, 0, 1}, 5354 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 6, 5355 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5356 {SetMatrix, 0, 0, 0, 6, 5357 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5358 {SetMatrixArray}, 5359 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 5360 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5361 {SetMatrixTranspose, 0, 0, 0, 6, 5362 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 5363 {SetMatrixTransposeArray}, 5364 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 5365 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 5366 {SetMatrixPointerArray}, 5367 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 5368 {0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001}}, 5369 {SetMatrixTransposePointerArray}, 5370 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 6, 5371 {0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001}}, 5372 }; 5373 5374 static const struct registerset_constants registerset_constants_struct_struct_int_float[] = 5375 { 5376 {"ssnf", {"ssnf", D3DXRS_FLOAT4, 4, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 6, 1, 3, 24, NULL}, 221}, 5377 {"ssnf.nf", {"nf", D3DXRS_FLOAT4, 4, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 221}, 5378 {"ssnf.s", {"s", D3DXRS_FLOAT4, 5, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 225}, 5379 {"ssnf.s.nf", {"nf", D3DXRS_FLOAT4, 5, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 225}, 5380 {"ssnf.s.vnf", {"vnf", D3DXRS_FLOAT4, 6, 1, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 1, 0, 12, NULL}, 229}, 5381 {"ssnf.nf1", {"nf1", D3DXRS_FLOAT4, 7, 1, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 1, 0, 4, NULL}, 233}, 5382 }; 5383 5384 static const struct registerset_test registerset_test_struct_struct_int_float[] = 5385 { 5386 {SetInt}, 5387 {SetBool}, 5388 {SetFloat}, 5389 {SetIntArray, 1, 0, 5}, 5390 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5391 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x00000000, 0x00000000, 0x00000000, 5392 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 0x40e00000}}, 5393 {SetBoolArray, 1, 0, 5}, 5394 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5395 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 5396 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000}}, 5397 {SetFloatArray, 0, 0, 5}, 5398 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 16, 5399 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5400 0x40800000, 0x40a00000, 0x40c00000, 0x00000000, 0x40e00000}}, 5401 {SetValue, 1, 0, 23}, 5402 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 16, 5403 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x00000000, 0x00000000, 0x00000000, 5404 0x40800000, 0x40a00000, 0x00000000, 0x00000000, 0x40e00000}}, 5405 {SetVector}, 5406 {SetVectorArray, 0, 0, 1}, 5407 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 16, 5408 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5409 0x40800000, 0x40a00000, 0x40c00000, 0x00000000, 0x40e00000}}, 5410 {SetMatrix, 0, 0, 0, 16, 5411 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5412 0x40800000, 0x40a00000, 0x40c00000, 0x00000000, 0x40e00000}}, 5413 {SetMatrixArray}, 5414 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5415 {0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5416 0x40800000, 0x40a00000, 0x40c00000, 0x00000000, 0x40e00000}}, 5417 {SetMatrixTranspose, 0, 0, 0, 16, {0x40000000}}, 5418 {SetMatrixTransposeArray}, 5419 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000000}}, 5420 {SetMatrixPointerArray}, 5421 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000000}}, 5422 {SetMatrixTransposePointerArray}, 5423 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x40000000}}, 5424 }; 5425 5426 static const struct registerset_constants registerset_constants_struct_struct_bool_float[] = 5427 { 5428 {"ssbf", {"ssbf", D3DXRS_FLOAT4, 8, 4, D3DXPC_STRUCT, D3DXPT_VOID, 1, 6, 1, 3, 24, NULL}, 91}, 5429 {"ssbf.bf", {"bf", D3DXRS_FLOAT4, 8, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 91}, 5430 {"ssbf.s", {"s", D3DXRS_FLOAT4, 9, 2, D3DXPC_STRUCT, D3DXPT_VOID, 1, 4, 1, 2, 16, NULL}, 95}, 5431 {"ssbf.s.bf", {"bf", D3DXRS_FLOAT4, 9, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 95}, 5432 {"ssbf.s.vbf", {"vbf", D3DXRS_FLOAT4, 10, 1, D3DXPC_VECTOR, D3DXPT_BOOL, 1, 3, 1, 0, 12, NULL}, 99}, 5433 {"ssbf.bf1", {"bf1", D3DXRS_FLOAT4, 11, 1, D3DXPC_SCALAR, D3DXPT_BOOL, 1, 1, 1, 0, 4, NULL}, 103}, 5434 }; 5435 5436 static const struct registerset_test registerset_test_struct_struct_bool_float[] = 5437 { 5438 {SetInt}, 5439 {SetBool}, 5440 {SetFloat}, 5441 {SetIntArray, 1, 0, 5}, 5442 {SetIntArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5443 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 5444 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000}}, 5445 {SetBoolArray, 1, 0, 5}, 5446 {SetBoolArray, 1, 6, REGISTER_OUTPUT_SIZE, 16, 5447 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 5448 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000}}, 5449 {SetFloatArray, 0, 0, 5}, 5450 {SetFloatArray, 0, 6, REGISTER_OUTPUT_SIZE, 16, 5451 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5452 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000}}, 5453 {SetValue, 1, 0, 23}, 5454 {SetValue, 1, 24, REGISTER_OUTPUT_SIZE * 4, 16, 5455 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 5456 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000}}, 5457 {SetVector}, 5458 {SetVectorArray, 0, 0, 1}, 5459 {SetVectorArray, 0, 2, REGISTER_OUTPUT_SIZE / 4, 16, 5460 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5461 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000}}, 5462 {SetMatrix, 0, 0, 0, 16, 5463 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5464 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000}}, 5465 {SetMatrixArray}, 5466 {SetMatrixArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, 5467 {0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5468 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000}}, 5469 {SetMatrixTranspose, 0, 0, 0, 16, {0x3f800000}}, 5470 {SetMatrixTransposeArray}, 5471 {SetMatrixTransposeArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x3f800000}}, 5472 {SetMatrixPointerArray}, 5473 {SetMatrixPointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x3f800000}}, 5474 {SetMatrixTransposePointerArray}, 5475 {SetMatrixTransposePointerArray, 0, 1, REGISTER_OUTPUT_SIZE / 16, 16, {0x3f800000}}, 5476 }; 5477 5478 /* 5479 * fxc.exe /Tvs_3_0 5480 */ 5481 #if 0 5482 row_major int3x2 ran[2] = {4, 5, 6, 1, 8, 1, 2, 3, 4, 7, 9, 1}; 5483 float4 main(float4 pos : POSITION) : POSITION 5484 { 5485 float4 tmp = 0; 5486 int k; 5487 for (k = 0; k < ran[1]._21; k++) 5488 tmp.y += pos.y + tmp.x; 5489 return tmp; 5490 } 5491 #endif 5492 static const DWORD registerset_blob_special_int[] = 5493 { 5494 0xfffe0300, 0x0038fffe, 0x42415443, 0x0000001c, 0x000000ab, 0xfffe0300, 0x00000001, 0x0000001c, 5495 0x00000100, 0x000000a4, 0x00000030, 0x00000001, 0x00000009, 0x00000034, 0x00000044, 0x006e6172, 5496 0x00020002, 0x00020003, 0x00000002, 0x00000000, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 5497 0x00000006, 0x00000001, 0x00000001, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000000, 5498 0x00000002, 0x00000003, 0x00000001, 0x00000000, 0x00000004, 0x00000007, 0x00000001, 0x00000000, 5499 0x00000009, 0x00000001, 0x00000001, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 5500 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 5501 0x332e3235, 0x00313131, 0x05000051, 0xa00f0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5502 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x02000001, 0x80010000, 5503 0xa0000000, 0x01000026, 0xf0e40008, 0x03000002, 0x80010000, 0x80000000, 0x90550000, 0x00000027, 5504 0x02000001, 0xe0020000, 0x80000000, 0x02000001, 0xe00d0000, 0xa0000000, 0x0000ffff, 5505 }; 5506 5507 static const struct registerset_constants registerset_constants_special_int[] = 5508 { 5509 {"ran", {"ran", D3DXRS_INT4, 0, 9, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 48, NULL}, 17}, 5510 {"ran[0]", {"ran", D3DXRS_INT4, 0, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 17}, 5511 {"ran[1]", {"ran", D3DXRS_INT4, 3, 3, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 1, 0, 24, NULL}, 29}, 5512 }; 5513 5514 /* 5515 * fxc.exe /Tvs_3_0 5516 */ 5517 #if 0 5518 float3 vaf[10]; 5519 float4 main(float4 pos : POSITION) : POSITION 5520 { 5521 float4 tmp = 0; 5522 tmp.y += pos.y + vaf[8].x; 5523 return tmp; 5524 } 5525 #endif 5526 static const DWORD registerset_blob_bigvec[] = 5527 { 5528 0xfffe0300, 0x0020fffe, 0x42415443, 0x0000001c, 0x0000004b, 0xfffe0300, 0x00000001, 0x0000001c, 5529 0x00000100, 0x00000044, 0x00000030, 0x00000002, 0x00000009, 0x00000034, 0x00000000, 0x00666176, 5530 0x00030001, 0x00030001, 0x0000000a, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 5531 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 5532 0x332e3235, 0x00313131, 0x05000051, 0xa00f0009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5533 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x03000002, 0xe0020000, 5534 0xa0000008, 0x90550000, 0x02000001, 0xe00d0000, 0xa0000009, 0x0000ffff, 5535 }; 5536 5537 static const struct registerset_constants registerset_constants_bigvec_float[] = 5538 { 5539 {"vaf", {"vaf", D3DXRS_FLOAT4, 0, 9, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 10, 0, 120, NULL}, 0}, 5540 {"vaf[0]", {"vaf", D3DXRS_FLOAT4, 0, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5541 {"vaf[1]", {"vaf", D3DXRS_FLOAT4, 1, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5542 {"vaf[2]", {"vaf", D3DXRS_FLOAT4, 2, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5543 {"vaf[3]", {"vaf", D3DXRS_FLOAT4, 3, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5544 {"vaf[4]", {"vaf", D3DXRS_FLOAT4, 4, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5545 {"vaf[5]", {"vaf", D3DXRS_FLOAT4, 5, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5546 {"vaf[6]", {"vaf", D3DXRS_FLOAT4, 6, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5547 {"vaf[7]", {"vaf", D3DXRS_FLOAT4, 7, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5548 {"vaf[8]", {"vaf", D3DXRS_FLOAT4, 8, 1, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5549 {"vaf[9]", {"vaf", D3DXRS_FLOAT4, 9, 0, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 1, 0, 12, NULL}, 0}, 5550 }; 5551 5552 static const struct registerset_test registerset_test_bigvec_float[] = 5553 { 5554 {SetMatrix, 0, 0, 0, 16, 5555 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5556 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123}}, 5557 {SetMatrixArray}, 5558 {SetMatrixArray, 0, 1, 1, 16, 5559 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5560 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123}}, 5561 {SetMatrixArray, 0, 2, 2, 32, 5562 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5563 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123, 0x00000000, 5564 0x41a00123, 0x41b00123, 0x41c00123, 0x00000000, 0x00000000, 0x41f00123, 0x42000123, 0x00000000, 5565 0x00000000, 0x42300123, 0x42400123, 0x00000000, 0x42600123, 0x42700123, 0x42800123}}, 5566 {SetMatrixArray, 0, 3, REGISTER_OUTPUT_SIZE / 16, 36, 5567 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5568 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123, 0x00000000, 5569 0x41a00123, 0x41b00123, 0x41c00123, 0x00000000, 0x00000000, 0x41f00123, 0x42000123, 0x00000000, 5570 0x00000000, 0x42300123, 0x42400123, 0x00000000, 0x42600123, 0x42700123, 0x42800123, 0x00000000, 5571 0x43000123, 0x43100123, 0x43200123}}, 5572 {SetMatrixTranspose, 0, 0, 0, 16, 5573 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5574 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123}}, 5575 {SetMatrixTransposeArray}, 5576 {SetMatrixTransposeArray, 0, 1, 1, 16, 5577 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5578 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123}}, 5579 {SetMatrixTransposeArray, 0, 2, 2, 32, 5580 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5581 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123, 0x00000000, 5582 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 0x41b00123, 0x41f00123, 0x42300123, 0x00000000, 5583 0x41c00123, 0x42000123, 0x42400123, 0x00000000, 0x41d00123, 0x42100123, 0x42500123}}, 5584 {SetMatrixTransposeArray, 0, 3, REGISTER_OUTPUT_SIZE / 16, 36, 5585 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5586 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123, 0x00000000, 5587 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 0x41b00123, 0x41f00123, 0x42300123, 0x00000000, 5588 0x41c00123, 0x42000123, 0x42400123, 0x00000000, 0x41d00123, 0x42100123, 0x42500123, 0x00000000, 5589 0x43000123, 0x43400123, 0x43800123}}, 5590 {SetMatrixPointerArray}, 5591 {SetMatrixPointerArray, 0, 1, 1, 16, 5592 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5593 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123}}, 5594 {SetMatrixPointerArray, 0, 2, 2, 32, 5595 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5596 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123, 0x00000000, 5597 0x41900123, 0x41a00123, 0x41b00123, 0x00000000, 0x41d00123, 0x00000000, 0x41f00123, 0x00000000, 5598 0x42100123, 0x00000000, 0x42300123, 0x00000000, 0x42500123, 0x42600123, 0x42700123}}, 5599 {SetMatrixPointerArray, 0, 3, REGISTER_OUTPUT_SIZE / 16, 36, 5600 {0x40000123, 0x00000000, 0x40800123, 0x00000000, 0x40c00123, 0x40e00123, 0x41000123, 0x00000000, 5601 0x41200123, 0x41300123, 0x41400123, 0x00000000, 0x41600123, 0x41700123, 0x41800123, 0x00000000, 5602 0x41900123, 0x41a00123, 0x41b00123, 0x00000000, 0x41d00123, 0x00000000, 0x41f00123, 0x00000000, 5603 0x42100123, 0x00000000, 0x42300123, 0x00000000, 0x42500123, 0x42600123, 0x42700123, 0x00000000, 5604 0x42800123, 0x42900123, 0x43000123}}, 5605 {SetMatrixTransposePointerArray}, 5606 {SetMatrixTransposePointerArray, 0, 1, 1, 16, 5607 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5608 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123}}, 5609 {SetMatrixTransposePointerArray, 0, 2, 2, 32, 5610 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5611 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123, 0x00000000, 5612 0x41900123, 0x41d00123, 0x42100123, 0x00000000, 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 5613 0x41b00123, 0x41f00123, 0x42300123, 0x00000000, 0x41c00123, 0x42000123, 0x42400123}}, 5614 {SetMatrixTransposePointerArray, 0, 3, REGISTER_OUTPUT_SIZE / 16, 36, 5615 {0x40000123, 0x40c00123, 0x41200123, 0x00000000, 0x00000000, 0x40e00123, 0x41300123, 0x00000000, 5616 0x40800123, 0x41000123, 0x41400123, 0x00000000, 0x40a00123, 0x41100123, 0x41500123, 0x00000000, 5617 0x41900123, 0x41d00123, 0x42100123, 0x00000000, 0x41a00123, 0x00000000, 0x00000000, 0x00000000, 5618 0x41b00123, 0x41f00123, 0x42300123, 0x00000000, 0x41c00123, 0x42000123, 0x42400123, 0x00000000, 5619 0x42800123, 0x43200123, 0x43600123}}, 5620 }; 5621 5622 /* 5623 * fxc.exe /Tvs_3_0 5624 */ 5625 #if 0 5626 float4x4 cf = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8}; 5627 float f = 33.33; 5628 float4 main(float4 pos : POSITION) : POSITION 5629 { 5630 float4 tmp = 0; 5631 tmp.y += cf._22; 5632 tmp.z = f; 5633 return tmp; 5634 } 5635 #endif 5636 static const DWORD registerset_blob_matrix_column_clamp[] = 5637 { 5638 0xfffe0300, 0x003efffe, 0x42415443, 0x0000001c, 0x000000c3, 0xfffe0300, 0x00000002, 0x0000001c, 5639 0x00000100, 0x000000bc, 0x00000044, 0x00000002, 0x00000002, 0x00000048, 0x00000058, 0x00000098, 5640 0x00020002, 0x00000001, 0x0000009c, 0x000000ac, 0xab006663, 0x00030003, 0x00040004, 0x00000001, 5641 0x00000000, 0x3f8ccccd, 0x40b00000, 0x411e6666, 0x3fc00000, 0x400ccccd, 0x40d33333, 0x3f99999a, 5642 0x3fcccccd, 0x40533333, 0x40f66666, 0x3fa66666, 0x3fd9999a, 0x408ccccd, 0x410ccccd, 0x3fb33333, 5643 0x3fe66666, 0xabab0066, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0x420551ec, 0x00000000, 5644 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 5645 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 5646 0x05000051, 0xa00f0003, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 5647 0xe00f0000, 0x02000001, 0x80020000, 0xa0550001, 0x03000005, 0xe00b0000, 0x80550000, 0xa0240003, 5648 0x02000001, 0xe0040000, 0xa0000002, 0x0000ffff, 5649 }; 5650 5651 static const struct registerset_constants registerset_constants_matrix_column_clamp[] = 5652 { 5653 {"cf", {"cf", D3DXRS_FLOAT4, 0, 2, D3DXPC_MATRIX_COLUMNS, D3DXPT_FLOAT, 4, 4, 1, 0, 64, NULL}, 0}, 5654 {"f", {"f", D3DXRS_FLOAT4, 2, 1, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 1, 0, 4, NULL}, 0}, 5655 }; 5656 5657 static const struct registerset_test registerset_test_matrix_column_clamp[] = 5658 { 5659 {SetMatrix, 0, 0, 0, 8, 5660 {0x40000123, 0x40c00123, 0x41200123, 0x41600123, 0x00000000, 0x40e00123, 0x41300123, 0x41700123}}, 5661 }; 5662 5663 static const struct 5664 { 5665 const char *name; 5666 const char *var; 5667 UINT start; 5668 D3DXREGISTER_SET regset; 5669 const DWORD *blob; 5670 const struct registerset_test *tests; 5671 UINT test_count; 5672 const struct registerset_constants *constants; 5673 UINT constant_count; 5674 } 5675 registerset_data[] = 5676 { 5677 /* scalar */ 5678 {"float", "f", 0, D3DXRS_FLOAT4, registerset_blob_scalar, 5679 registerset_test_scalar_float, ARRAY_SIZE(registerset_test_scalar_float), 5680 registerset_constants_scalar_float, ARRAY_SIZE(registerset_constants_scalar_float)}, 5681 {"int", "n", 0, D3DXRS_INT4, registerset_blob_scalar, 5682 registerset_test_scalar_int, ARRAY_SIZE(registerset_test_scalar_int), 5683 registerset_constants_scalar_int, ARRAY_SIZE(registerset_constants_scalar_int)}, 5684 {"int float", "nf", 4, D3DXRS_FLOAT4, registerset_blob_scalar, 5685 registerset_test_scalar_int_float, ARRAY_SIZE(registerset_test_scalar_int_float), 5686 registerset_constants_scalar_int_float, ARRAY_SIZE(registerset_constants_scalar_int_float)}, 5687 {"bool float", "bf", 8, D3DXRS_FLOAT4, registerset_blob_scalar, 5688 registerset_test_scalar_bool_float, ARRAY_SIZE(registerset_test_scalar_bool_float), 5689 registerset_constants_scalar_bool_float, ARRAY_SIZE(registerset_constants_scalar_bool_float)}, 5690 {"bool", "b", 0, D3DXRS_BOOL, registerset_blob_scalar, 5691 registerset_test_scalar_bool, ARRAY_SIZE(registerset_test_scalar_bool), 5692 registerset_constants_scalar_bool, ARRAY_SIZE(registerset_constants_scalar_bool)}, 5693 /* scalar array */ 5694 {"float [2]", "af", 0, D3DXRS_FLOAT4, registerset_blob_scalar_array, 5695 registerset_test_scalar_array_float, ARRAY_SIZE(registerset_test_scalar_array_float), 5696 registerset_constants_scalar_array_float, ARRAY_SIZE(registerset_constants_scalar_array_float)}, 5697 {"int [2]", "an", 0, D3DXRS_INT4, registerset_blob_scalar_array, 5698 registerset_test_scalar_array_int, ARRAY_SIZE(registerset_test_scalar_array_int), 5699 registerset_constants_scalar_array_int, ARRAY_SIZE(registerset_constants_scalar_array_int)}, 5700 {"bool [2]", "ab", 0, D3DXRS_BOOL, registerset_blob_scalar_array, 5701 registerset_test_scalar_array_bool, ARRAY_SIZE(registerset_test_scalar_array_bool), 5702 registerset_constants_scalar_array_bool, ARRAY_SIZE(registerset_constants_scalar_array_bool)}, 5703 {"int float [2]", "anf", 8, D3DXRS_FLOAT4, registerset_blob_scalar_array, 5704 registerset_test_scalar_array_int_float, ARRAY_SIZE(registerset_test_scalar_array_int_float), 5705 registerset_constants_scalar_array_int_float, ARRAY_SIZE(registerset_constants_scalar_array_int_float)}, 5706 {"bool float [2]", "abf", 16, D3DXRS_FLOAT4, registerset_blob_scalar_array, 5707 registerset_test_scalar_array_bool_float, ARRAY_SIZE(registerset_test_scalar_array_bool_float), 5708 registerset_constants_scalar_array_bool_float, ARRAY_SIZE(registerset_constants_scalar_array_bool_float)}, 5709 /* vector */ 5710 {"float 3", "vf", 0, D3DXRS_FLOAT4, registerset_blob_vector, 5711 registerset_test_vector_float, ARRAY_SIZE(registerset_test_vector_float), 5712 registerset_constants_vector_float, ARRAY_SIZE(registerset_constants_vector_float)}, 5713 {"int 3", "vn", 0, D3DXRS_INT4, registerset_blob_vector, 5714 registerset_test_vector_int, ARRAY_SIZE(registerset_test_vector_int), 5715 registerset_constants_vector_int, ARRAY_SIZE(registerset_constants_vector_int)}, 5716 {"bool 3", "vb", 0, D3DXRS_BOOL, registerset_blob_vector, 5717 registerset_test_vector_bool, ARRAY_SIZE(registerset_test_vector_bool), 5718 registerset_constants_vector_bool, ARRAY_SIZE(registerset_constants_vector_bool)}, 5719 {"bool float 3", "vbf", 8, D3DXRS_FLOAT4, registerset_blob_vector, 5720 registerset_test_vector_bool_float, ARRAY_SIZE(registerset_test_vector_bool_float), 5721 registerset_constants_vector_bool_float, ARRAY_SIZE(registerset_constants_vector_bool_float)}, 5722 {"int float 3", "vnf", 4, D3DXRS_FLOAT4, registerset_blob_vector, 5723 registerset_test_vector_int_float, ARRAY_SIZE(registerset_test_vector_int_float), 5724 registerset_constants_vector_int_float, ARRAY_SIZE(registerset_constants_vector_int_float)}, 5725 /* vector array */ 5726 {"float 3 [2]", "vaf", 0, D3DXRS_FLOAT4, registerset_blob_vector_array, 5727 registerset_test_vector_array_float, ARRAY_SIZE(registerset_test_vector_array_float), 5728 registerset_constants_vector_array_float, ARRAY_SIZE(registerset_constants_vector_array_float)}, 5729 {"int 3 [2]", "van", 0, D3DXRS_INT4, registerset_blob_vector_array, 5730 registerset_test_vector_array_int, ARRAY_SIZE(registerset_test_vector_array_int), 5731 registerset_constants_vector_array_int, ARRAY_SIZE(registerset_constants_vector_array_int)}, 5732 {"bool 3 [2]", "vab", 0, D3DXRS_BOOL, registerset_blob_vector_array, 5733 registerset_test_vector_array_bool, ARRAY_SIZE(registerset_test_vector_array_bool), 5734 registerset_constants_vector_array_bool, ARRAY_SIZE(registerset_constants_vector_array_bool)}, 5735 {"bool float 3 [2]", "vabf", 16, D3DXRS_FLOAT4, registerset_blob_vector_array, 5736 registerset_test_vector_array_bool_float, ARRAY_SIZE(registerset_test_vector_array_bool_float), 5737 registerset_constants_vector_array_bool_float, ARRAY_SIZE(registerset_constants_vector_array_bool_float)}, 5738 {"int float 3 [2]", "vanf", 8, D3DXRS_FLOAT4, registerset_blob_vector_array, 5739 registerset_test_vector_array_int_float, ARRAY_SIZE(registerset_test_vector_array_int_float), 5740 registerset_constants_vector_array_int_float, ARRAY_SIZE(registerset_constants_vector_array_int_float)}, 5741 /* matrix column */ 5742 {"float c3x2", "cf", 0, D3DXRS_FLOAT4, registerset_blob_column, 5743 registerset_test_column_float, ARRAY_SIZE(registerset_test_column_float), 5744 registerset_constants_column_float, ARRAY_SIZE(registerset_constants_column_float)}, 5745 {"int c3x2", "cn", 0, D3DXRS_INT4, registerset_blob_column, 5746 registerset_test_column_int, ARRAY_SIZE(registerset_test_column_int), 5747 registerset_constants_column_int, ARRAY_SIZE(registerset_constants_column_int)}, 5748 {"bool c3x2", "cb", 0, D3DXRS_BOOL, registerset_blob_column, 5749 registerset_test_column_bool, ARRAY_SIZE(registerset_test_column_bool), 5750 registerset_constants_column_bool, ARRAY_SIZE(registerset_constants_column_bool)}, 5751 {"bool float c3x2", "cbf", 8, D3DXRS_FLOAT4, registerset_blob_column, 5752 registerset_test_column_bool_float, ARRAY_SIZE(registerset_test_column_bool_float), 5753 registerset_constants_column_bool_float, ARRAY_SIZE(registerset_constants_column_bool_float)}, 5754 {"int float c3x2", "cnf", 16, D3DXRS_FLOAT4, registerset_blob_column, 5755 registerset_test_column_int_float, ARRAY_SIZE(registerset_test_column_int_float), 5756 registerset_constants_column_int_float, ARRAY_SIZE(registerset_constants_column_int_float)}, 5757 /* matrix column array */ 5758 {"float c3x2 [2]", "caf", 0, D3DXRS_FLOAT4, registerset_blob_column_array, 5759 registerset_test_column_array_float, ARRAY_SIZE(registerset_test_column_array_float), 5760 registerset_constants_column_array_float, ARRAY_SIZE(registerset_constants_column_array_float)}, 5761 {"int c3x2 [2]", "can", 0, D3DXRS_INT4, registerset_blob_column_array, 5762 registerset_test_column_array_int, ARRAY_SIZE(registerset_test_column_array_int), 5763 registerset_constants_column_array_int, ARRAY_SIZE(registerset_constants_column_array_int)}, 5764 {"bool c3x2 [2]", "cab", 0, D3DXRS_BOOL, registerset_blob_column_array, 5765 registerset_test_column_array_bool, ARRAY_SIZE(registerset_test_column_array_bool), 5766 registerset_constants_column_array_bool, ARRAY_SIZE(registerset_constants_column_array_bool)}, 5767 {"bool float c3x2 [2]", "cabf", 16, D3DXRS_FLOAT4, registerset_blob_column_array, 5768 registerset_test_column_array_bool_float, ARRAY_SIZE(registerset_test_column_array_bool_float), 5769 registerset_constants_column_array_bool_float, ARRAY_SIZE(registerset_constants_column_array_bool_float)}, 5770 {"int float c3x2 [2]", "canf", 32, D3DXRS_FLOAT4, registerset_blob_column_array, 5771 registerset_test_column_array_int_float, ARRAY_SIZE(registerset_test_column_array_int_float), 5772 registerset_constants_column_array_int_float, ARRAY_SIZE(registerset_constants_column_array_int_float)}, 5773 /* matrix row */ 5774 {"float r3x2", "rf", 0, D3DXRS_FLOAT4, registerset_blob_row, 5775 registerset_test_row_float, ARRAY_SIZE(registerset_test_row_float), 5776 registerset_constants_row_float, ARRAY_SIZE(registerset_constants_row_float)}, 5777 {"int r3x2", "rn", 0, D3DXRS_INT4, registerset_blob_row, 5778 registerset_test_row_int, ARRAY_SIZE(registerset_test_row_int), 5779 registerset_constants_row_int, ARRAY_SIZE(registerset_constants_row_int)}, 5780 {"bool r3x2", "rb", 0, D3DXRS_BOOL, registerset_blob_row, 5781 registerset_test_row_bool, ARRAY_SIZE(registerset_test_row_bool), 5782 registerset_constants_row_bool, ARRAY_SIZE(registerset_constants_row_bool)}, 5783 {"bool float r3x2", "rbf", 12, D3DXRS_FLOAT4, registerset_blob_row, 5784 registerset_test_row_bool_float, ARRAY_SIZE(registerset_test_row_bool_float), 5785 registerset_constants_row_bool_float, ARRAY_SIZE(registerset_constants_row_bool_float)}, 5786 {"int float r3x2", "rnf", 24, D3DXRS_FLOAT4, registerset_blob_row, 5787 registerset_test_row_int_float, ARRAY_SIZE(registerset_test_row_int_float), 5788 registerset_constants_row_int_float, ARRAY_SIZE(registerset_constants_row_int_float)}, 5789 /* matrix row array */ 5790 {"float 3x2 [2]", "raf", 0, D3DXRS_FLOAT4, registerset_blob_row_array, 5791 registerset_test_row_array_float, ARRAY_SIZE(registerset_test_row_array_float), 5792 registerset_constants_row_array_float, ARRAY_SIZE(registerset_constants_row_array_float)}, 5793 {"int 3x2 [2]", "ran", 0, D3DXRS_INT4, registerset_blob_row_array, 5794 registerset_test_row_array_int, ARRAY_SIZE(registerset_test_row_array_int), 5795 registerset_constants_row_array_int, ARRAY_SIZE(registerset_constants_row_array_int)}, 5796 {"bool 3x2 [2]", "rab", 0, D3DXRS_BOOL, registerset_blob_row_array, 5797 registerset_test_row_array_bool, ARRAY_SIZE(registerset_test_row_array_bool), 5798 registerset_constants_row_array_bool, ARRAY_SIZE(registerset_constants_row_array_bool)}, 5799 {"bool float 3x2 [2]", "rabf", 24, D3DXRS_FLOAT4, registerset_blob_row_array, 5800 registerset_test_row_array_bool_float, ARRAY_SIZE(registerset_test_row_array_bool_float), 5801 registerset_constants_row_array_bool_float, ARRAY_SIZE(registerset_constants_row_array_bool_float)}, 5802 {"int float 3x2 [2]", "ranf", 48, D3DXRS_FLOAT4, registerset_blob_row_array, 5803 registerset_test_row_array_int_float, ARRAY_SIZE(registerset_test_row_array_int_float), 5804 registerset_constants_row_array_int_float, ARRAY_SIZE(registerset_constants_row_array_int_float)}, 5805 /* struct */ 5806 {"struct float", "sf", 0, D3DXRS_FLOAT4, registerset_blob_struct, 5807 registerset_test_struct_float, ARRAY_SIZE(registerset_test_struct_float), 5808 registerset_constants_struct_float, ARRAY_SIZE(registerset_constants_struct_float)}, 5809 {"struct int", "sn", 0, D3DXRS_INT4, registerset_blob_struct, 5810 registerset_test_struct_int, ARRAY_SIZE(registerset_test_struct_int), 5811 registerset_constants_struct_int, ARRAY_SIZE(registerset_constants_struct_int)}, 5812 {"struct bool", "sb", 0, D3DXRS_BOOL, registerset_blob_struct, 5813 registerset_test_struct_bool, ARRAY_SIZE(registerset_test_struct_bool), 5814 registerset_constants_struct_bool, ARRAY_SIZE(registerset_constants_struct_bool)}, 5815 {"struct bool float", "sbf", 16, D3DXRS_FLOAT4, registerset_blob_struct, 5816 registerset_test_struct_bool_float, ARRAY_SIZE(registerset_test_struct_bool_float), 5817 registerset_constants_struct_bool_float, ARRAY_SIZE(registerset_constants_struct_bool_float)}, 5818 {"struct int float", "snf", 8, D3DXRS_FLOAT4, registerset_blob_struct, 5819 registerset_test_struct_int_float, ARRAY_SIZE(registerset_test_struct_int_float), 5820 registerset_constants_struct_int_float, ARRAY_SIZE(registerset_constants_struct_int_float)}, 5821 /* struct array */ 5822 {"struct float [2]", "saf", 0, D3DXRS_FLOAT4, registerset_blob_struct_array, 5823 registerset_test_struct_array_float, ARRAY_SIZE(registerset_test_struct_array_float), 5824 registerset_constants_struct_array_float, ARRAY_SIZE(registerset_constants_struct_array_float)}, 5825 {"struct int [2]", "san", 0, D3DXRS_INT4, registerset_blob_struct_array, 5826 registerset_test_struct_array_int, ARRAY_SIZE(registerset_test_struct_array_int), 5827 registerset_constants_struct_array_int, ARRAY_SIZE(registerset_constants_struct_array_int)}, 5828 {"struct bool [2]", "sab", 0, D3DXRS_BOOL, registerset_blob_struct_array, 5829 registerset_test_struct_array_bool, ARRAY_SIZE(registerset_test_struct_array_bool), 5830 registerset_constants_struct_array_bool, ARRAY_SIZE(registerset_constants_struct_array_bool)}, 5831 {"struct bool float [2]", "sabf", 32, D3DXRS_FLOAT4, registerset_blob_struct_array, 5832 registerset_test_struct_array_bool_float, ARRAY_SIZE(registerset_test_struct_array_bool_float), 5833 registerset_constants_struct_array_bool_float, ARRAY_SIZE(registerset_constants_struct_array_bool_float)}, 5834 {"struct int float [2]", "sanf", 16, D3DXRS_FLOAT4, registerset_blob_struct_array, 5835 registerset_test_struct_array_int_float, ARRAY_SIZE(registerset_test_struct_array_int_float), 5836 registerset_constants_struct_array_int_float, ARRAY_SIZE(registerset_constants_struct_array_int_float)}, 5837 /* struct struct */ 5838 {"struct struct float", "ssf", 0, D3DXRS_FLOAT4, registerset_blob_struct_struct, 5839 registerset_test_struct_struct_float, ARRAY_SIZE(registerset_test_struct_struct_float), 5840 registerset_constants_struct_struct_float, ARRAY_SIZE(registerset_constants_struct_struct_float)}, 5841 {"struct struct int", "ssn", 0, D3DXRS_INT4, registerset_blob_struct_struct, 5842 registerset_test_struct_struct_int, ARRAY_SIZE(registerset_test_struct_struct_int), 5843 registerset_constants_struct_struct_int, ARRAY_SIZE(registerset_constants_struct_struct_int)}, 5844 {"struct struct bool", "ssb", 0, D3DXRS_BOOL, registerset_blob_struct_struct, 5845 registerset_test_struct_struct_bool, ARRAY_SIZE(registerset_test_struct_struct_bool), 5846 registerset_constants_struct_struct_bool, ARRAY_SIZE(registerset_constants_struct_struct_bool)}, 5847 {"struct struct bool float", "ssbf", 32, D3DXRS_FLOAT4, registerset_blob_struct_struct, 5848 registerset_test_struct_struct_bool_float, ARRAY_SIZE(registerset_test_struct_struct_bool_float), 5849 registerset_constants_struct_struct_bool_float, ARRAY_SIZE(registerset_constants_struct_struct_bool_float)}, 5850 {"struct struct int float", "ssnf", 16, D3DXRS_FLOAT4, registerset_blob_struct_struct, 5851 registerset_test_struct_struct_int_float, ARRAY_SIZE(registerset_test_struct_struct_int_float), 5852 registerset_constants_struct_struct_int_float, ARRAY_SIZE(registerset_constants_struct_struct_int_float)}, 5853 /* special */ 5854 {"int ran", "ran", 0, D3DXRS_INT4, registerset_blob_special_int, NULL, 0, 5855 registerset_constants_special_int, ARRAY_SIZE(registerset_constants_special_int)}, 5856 {"bigvec", "vaf", 0, D3DXRS_FLOAT4, registerset_blob_bigvec, 5857 registerset_test_bigvec_float, ARRAY_SIZE(registerset_test_bigvec_float), 5858 registerset_constants_bigvec_float, ARRAY_SIZE(registerset_constants_bigvec_float)}, 5859 {"cf", "cf", 0, D3DXRS_FLOAT4, registerset_blob_matrix_column_clamp, 5860 registerset_test_matrix_column_clamp, ARRAY_SIZE(registerset_test_matrix_column_clamp), 5861 registerset_constants_matrix_column_clamp, ARRAY_SIZE(registerset_constants_matrix_column_clamp)}, 5862 }; 5863 5864 static void registerset_clear(IDirect3DDevice9 *device) 5865 { 5866 DWORD zero[1024]; 5867 HRESULT hr; 5868 5869 memset(zero, 0xde, 4096); 5870 5871 hr = IDirect3DDevice9_SetVertexShaderConstantF(device, 0, (FLOAT*)zero, 256); 5872 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5873 5874 hr = IDirect3DDevice9_SetPixelShaderConstantF(device, 0, (FLOAT*)zero, 224); 5875 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5876 5877 hr = IDirect3DDevice9_SetVertexShaderConstantB(device, 0, (BOOL*)zero, 16); 5878 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5879 5880 hr = IDirect3DDevice9_SetPixelShaderConstantB(device, 0, (BOOL*)zero, 16); 5881 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5882 5883 hr = IDirect3DDevice9_SetVertexShaderConstantI(device, 0, (INT*)zero, 16); 5884 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5885 5886 hr = IDirect3DDevice9_SetPixelShaderConstantI(device, 0, (INT*)zero, 16); 5887 ok(hr == D3D_OK, "Clear failed, got %08x, expected %08x\n", hr, D3D_OK); 5888 } 5889 5890 static UINT registerset_compare(IDirect3DDevice9 *device, BOOL is_vs, D3DXREGISTER_SET regset, 5891 UINT start, UINT in_count, const DWORD *expected) 5892 { 5893 DWORD ret[1024] = {0}; 5894 HRESULT hr; 5895 UINT count = 1024, i, err = 0; 5896 5897 memset(ret, 0xde, 4096); 5898 5899 /* get shader constants */ 5900 switch (regset) 5901 { 5902 case D3DXRS_BOOL: 5903 count = 16; 5904 if (is_vs) hr = IDirect3DDevice9_GetVertexShaderConstantB(device, 0, (BOOL*)ret, 16); 5905 else hr = IDirect3DDevice9_GetPixelShaderConstantB(device, 0, (BOOL*)ret, 16); 5906 ok(hr == D3D_OK, "Get*ShaderConstantB failed, got %08x\n", hr); 5907 break; 5908 5909 case D3DXRS_INT4: 5910 count = 256; 5911 if (is_vs) hr = IDirect3DDevice9_GetVertexShaderConstantI(device, 0, (INT*)ret, 16); 5912 else hr = IDirect3DDevice9_GetPixelShaderConstantI(device, 0, (INT*)ret, 16); 5913 ok(hr == D3D_OK, "Get*ShaderConstantI failed, got %08x\n", hr); 5914 break; 5915 5916 case D3DXRS_FLOAT4: 5917 if (is_vs) hr = IDirect3DDevice9_GetVertexShaderConstantF(device, 0, (FLOAT*)ret, 256); 5918 else 5919 { 5920 count = 896; 5921 hr = IDirect3DDevice9_GetPixelShaderConstantF(device, 0, (FLOAT*)ret, 224); 5922 } 5923 ok(hr == D3D_OK, "Get*ShaderConstantF failed, got %08x\n", hr); 5924 break; 5925 5926 default: 5927 ok(0, "This should not happen!\n"); 5928 break; 5929 } 5930 5931 /* compare shader constants */ 5932 for (i = 0; i < count; ++i) 5933 { 5934 DWORD value = 0xdededede; 5935 if (i >= start && i < start + in_count) value = expected[i - start]; 5936 5937 ok(ret[i] == value, "Get*ShaderConstant failed, %u got 0x%x(%f) expected 0x%x(%f)\n", i, 5938 ret[i], ((FLOAT *)ret)[i], value, *((FLOAT *)&value)); 5939 if (ret[i] != value) err++; 5940 } 5941 5942 return err; 5943 } 5944 5945 static UINT registerset_compare_all(IDirect3DDevice9 *device, BOOL is_vs, D3DXREGISTER_SET regset, 5946 UINT start, UINT in_count, const DWORD *expected) 5947 { 5948 D3DXREGISTER_SET regsets[] = {D3DXRS_BOOL, D3DXRS_INT4, D3DXRS_FLOAT4}; 5949 UINT err = 0, i; 5950 5951 for (i = 0; i < ARRAY_SIZE(regsets); i++) 5952 { 5953 if (regset == regsets[i]) 5954 err += registerset_compare(device, is_vs, regset, start, in_count, expected); 5955 else 5956 err += registerset_compare(device, is_vs, regsets[i], 0, 0, NULL); 5957 5958 err += registerset_compare(device, !is_vs, regsets[i], 0, 0, NULL); 5959 } 5960 5961 return err; 5962 } 5963 5964 static HRESULT registerset_apply(ID3DXConstantTable *ctable, IDirect3DDevice9 *device, D3DXHANDLE constant, 5965 UINT index, DWORD count, enum Type type) 5966 { 5967 const DWORD *in = registerset_test_input[index]; 5968 const D3DXMATRIX *inp[REGISTER_OUTPUT_SIZE / 16]; 5969 unsigned int i; 5970 5971 /* overlap, to see the difference between Array and PointerArray */ 5972 for (i = 0; i < REGISTER_OUTPUT_SIZE / 16; i++) 5973 { 5974 inp[i] = (D3DXMATRIX *)&in[i * 15]; 5975 } 5976 5977 switch (type) 5978 { 5979 case SetInt: 5980 return ID3DXConstantTable_SetInt(ctable, device, constant, *((INT *)in)); 5981 case SetFloat: 5982 return ID3DXConstantTable_SetFloat(ctable, device, constant, *((FLOAT *)in)); 5983 case SetBool: 5984 return ID3DXConstantTable_SetBool(ctable, device, constant, *((BOOL *)in)); 5985 case SetIntArray: 5986 return ID3DXConstantTable_SetIntArray(ctable, device, constant, (INT *)in, count); 5987 case SetBoolArray: 5988 return ID3DXConstantTable_SetBoolArray(ctable, device, constant, (BOOL *)in, count); 5989 case SetFloatArray: 5990 return ID3DXConstantTable_SetFloatArray(ctable, device, constant, (FLOAT *)in, count); 5991 case SetMatrix: 5992 return ID3DXConstantTable_SetMatrix(ctable, device, constant, (D3DXMATRIX *)in); 5993 case SetMatrixTranspose: 5994 return ID3DXConstantTable_SetMatrixTranspose(ctable, device, constant, (D3DXMATRIX *)in); 5995 case SetMatrixArray: 5996 return ID3DXConstantTable_SetMatrixArray(ctable, device, constant, (D3DXMATRIX *)in, count); 5997 case SetMatrixTransposeArray: 5998 return ID3DXConstantTable_SetMatrixTransposeArray(ctable, device, constant, (D3DXMATRIX *)in, count); 5999 case SetVector: 6000 return ID3DXConstantTable_SetVector(ctable, device, constant, (D3DXVECTOR4 *)in); 6001 case SetVectorArray: 6002 return ID3DXConstantTable_SetVectorArray(ctable, device, constant, (D3DXVECTOR4 *)in, count); 6003 case SetValue: 6004 return ID3DXConstantTable_SetValue(ctable, device, constant, in, count); 6005 case SetMatrixPointerArray: 6006 return ID3DXConstantTable_SetMatrixPointerArray(ctable, device, constant, inp, count); 6007 case SetMatrixTransposePointerArray: 6008 return ID3DXConstantTable_SetMatrixTransposePointerArray(ctable, device, constant, inp, count); 6009 } 6010 6011 ok(0, "This should not happen!\n"); 6012 return D3D_OK; 6013 } 6014 6015 static void test_registerset(void) 6016 { 6017 UINT k; 6018 HWND wnd; 6019 IDirect3D9 *d3d; 6020 IDirect3DDevice9 *device; 6021 D3DPRESENT_PARAMETERS d3dpp; 6022 HRESULT hr; 6023 ULONG count; 6024 D3DCAPS9 caps; 6025 6026 if (!(wnd = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0, 6027 640, 480, NULL, NULL, NULL, NULL))) 6028 { 6029 skip("Couldn't create application window\n"); 6030 return; 6031 } 6032 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION))) 6033 { 6034 skip("Couldn't create IDirect3D9 object\n"); 6035 DestroyWindow(wnd); 6036 return; 6037 } 6038 6039 ZeroMemory(&d3dpp, sizeof(d3dpp)); 6040 d3dpp.Windowed = TRUE; 6041 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 6042 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &device); 6043 if (FAILED(hr)) 6044 { 6045 skip("Failed to create IDirect3DDevice9 object %#x\n", hr); 6046 IDirect3D9_Release(d3d); 6047 DestroyWindow(wnd); 6048 return; 6049 } 6050 6051 hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); 6052 ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr); 6053 if (caps.VertexShaderVersion < D3DVS_VERSION(3, 0) 6054 || caps.PixelShaderVersion < D3DPS_VERSION(3, 0)) 6055 { 6056 skip("Skipping: Test requires VS >= 3 and PS >= 3.\n"); 6057 IDirect3DDevice9_Release(device); 6058 IDirect3D9_Release(d3d); 6059 DestroyWindow(wnd); 6060 return; 6061 } 6062 6063 for (k = 0; k < ARRAY_SIZE(registerset_data); ++k) 6064 { 6065 const char *tablename = registerset_data[k].name; 6066 const char *name = registerset_data[k].var; 6067 ID3DXConstantTable *ctable; 6068 D3DXCONSTANTTABLE_DESC tdesc; 6069 D3DXHANDLE constant; 6070 UINT i; 6071 BOOL is_vs; 6072 DWORD *ctab; 6073 6074 hr = D3DXGetShaderConstantTable(registerset_data[k].blob, &ctable); 6075 ok(hr == D3D_OK, "D3DXGetShaderConstantTable \"%s\" failed, got %08x, expected %08x\n", tablename, hr, D3D_OK); 6076 6077 hr = ID3DXConstantTable_GetDesc(ctable, &tdesc); 6078 ok(hr == D3D_OK, "GetDesc \"%s\" failed, got %08x, expected %08x\n", tablename, hr, D3D_OK); 6079 6080 ctab = ID3DXConstantTable_GetBufferPointer(ctable); 6081 ok(ctab[0] == registerset_data[k].blob[3], "ID3DXConstantTable_GetBufferPointer failed\n"); 6082 6083 is_vs = (tdesc.Version & 0xFFFF0000) == 0xFFFE0000; 6084 6085 for (i = 0; i < registerset_data[k].constant_count; ++i) 6086 { 6087 const char *fullname = registerset_data[k].constants[i].fullname; 6088 const D3DXCONSTANT_DESC *expected_desc = ®isterset_data[k].constants[i].desc; 6089 D3DXCONSTANT_DESC desc; 6090 UINT nr = 0; 6091 UINT ctaboffset = registerset_data[k].constants[i].ctaboffset; 6092 6093 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, fullname); 6094 ok(constant != NULL, "GetConstantByName \"%s\" failed\n", fullname); 6095 6096 hr = ID3DXConstantTable_GetConstantDesc(ctable, constant, &desc, &nr); 6097 ok(hr == D3D_OK, "GetConstantDesc \"%s\" failed, got %08x, expected %08x\n", fullname, hr, D3D_OK); 6098 6099 ok(!strcmp(expected_desc->Name, desc.Name), "GetConstantDesc \"%s\" failed, got \"%s\", expected \"%s\"\n", 6100 fullname, desc.Name, expected_desc->Name); 6101 ok(expected_desc->RegisterSet == desc.RegisterSet, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 6102 fullname, desc.RegisterSet, expected_desc->RegisterSet); 6103 ok(expected_desc->RegisterIndex == desc.RegisterIndex, 6104 "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6105 fullname, desc.RegisterIndex, expected_desc->RegisterIndex); 6106 ok(expected_desc->RegisterCount == desc.RegisterCount, 6107 "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6108 fullname, desc.RegisterCount, expected_desc->RegisterCount); 6109 ok(expected_desc->Class == desc.Class, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6110 fullname, desc.Class, expected_desc->Class); 6111 ok(expected_desc->Type == desc.Type, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 6112 fullname, desc.Type, expected_desc->Type); 6113 ok(expected_desc->Rows == desc.Rows, "GetConstantDesc \"%s\" failed, got %#x, expected %#x\n", 6114 fullname, desc.Rows, expected_desc->Rows); 6115 ok(expected_desc->Columns == desc.Columns, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6116 fullname, desc.Columns, expected_desc->Columns); 6117 ok(expected_desc->Elements == desc.Elements, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6118 fullname, desc.Elements, expected_desc->Elements); 6119 ok(expected_desc->StructMembers == desc.StructMembers, 6120 "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6121 fullname, desc.StructMembers, expected_desc->StructMembers); 6122 ok(expected_desc->Bytes == desc.Bytes, "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6123 fullname, desc.Bytes, expected_desc->Bytes); 6124 if (ctaboffset) 6125 { 6126 ok(ctaboffset == (DWORD *)desc.DefaultValue - ctab, 6127 "GetConstantDesc \"%s\" failed, got %u, expected %u\n", 6128 fullname, (UINT)((DWORD *)desc.DefaultValue - ctab), ctaboffset); 6129 } 6130 } 6131 6132 constant = ID3DXConstantTable_GetConstantByName(ctable, NULL, name); 6133 ok(constant != NULL, "GetConstantByName \"%s\" \"%s\" failed\n", tablename, name); 6134 6135 for (i = 0; i < registerset_data[k].test_count; ++i) 6136 { 6137 const struct registerset_test *test = ®isterset_data[k].tests[i]; 6138 UINT ret; 6139 6140 registerset_clear(device); 6141 6142 hr = registerset_apply(ctable, device, constant, test->in_index, test->in_count_min, test->type); 6143 ok(hr == D3D_OK, "Set* \"%s\" index %u, count %u failed, got %x, expected %x\n", tablename, i, 6144 test->in_count_min, hr, D3D_OK); 6145 6146 ret = registerset_compare_all(device, is_vs, registerset_data[k].regset, 6147 registerset_data[k].start, test->out_count, test->out); 6148 ok(ret == 0, "Get*ShaderConstant \"%s\" index %u, count %u failed\n", tablename, i, test->in_count_min); 6149 6150 if (test->in_count_max > test->in_count_min) 6151 { 6152 registerset_clear(device); 6153 6154 hr = registerset_apply(ctable, device, constant, test->in_index, test->in_count_max, test->type); 6155 ok(hr == D3D_OK, "Set* \"%s\" index %u, count %u failed, got %x, expected %x\n", tablename, i, 6156 test->in_count_max, hr, D3D_OK); 6157 6158 ret = registerset_compare_all(device, is_vs, registerset_data[k].regset, 6159 registerset_data[k].start, test->out_count, test->out); 6160 ok(ret == 0, "Get*ShaderConstant \"%s\" index %u, count %u failed\n", tablename, i, test->in_count_max); 6161 } 6162 } 6163 6164 count = ID3DXConstantTable_Release(ctable); 6165 ok(count == 0, "Release \"%s\" failed, got %u, expected %u\n", tablename, count, 0); 6166 } 6167 6168 /* Release resources */ 6169 count = IDirect3DDevice9_Release(device); 6170 ok(count == 0, "The Direct3D device reference count was %u, should be 0\n", count); 6171 6172 count = IDirect3D9_Release(d3d); 6173 ok(count == 0, "The Direct3D object reference count was %u, should be 0\n", count); 6174 6175 if (wnd) DestroyWindow(wnd); 6176 } 6177 6178 /* 6179 * For D3DXRS_INT4 (int_count, ints[]): 6180 * Native seems to just set the following shader blob up to the register count, which in bad cases is up 6181 * to 4 times larger than the actual correct value. This explanes where the "bogus" values for these cases 6182 * come from. Somehow they forgot that the registers are INT4 and not INT. 6183 */ 6184 static const struct 6185 { 6186 const char *name; 6187 const DWORD *blob; 6188 unsigned int float_count; 6189 unsigned int int_count; 6190 unsigned int bool_count; 6191 const DWORD floats[1024]; 6192 const DWORD ints[256]; 6193 const DWORD bools[16]; 6194 } 6195 registerset_defaults_data[] = 6196 { 6197 {"scalar", registerset_blob_scalar, 12, 4, 1, 6198 {0x40a33333, 0x00000000, 0x00000000, 0x00000000, 0x41300000, 0x00000000, 0x00000000, 0x00000000, 6199 0x3f800000, 0x00000000, 0x00000000, 0x00000000}, 6200 {0x00000008, 0x00000000, 0x00000001}, 6201 {0xffffffff}}, 6202 {"scalar array", registerset_blob_scalar_array, 24, 8, 2, 6203 {0x40466666, 0x00000000, 0x00000000, 0x00000000, 0x404ccccd, 0x00000000, 0x00000000, 0x00000000, 6204 0x41600000, 0x00000000, 0x00000000, 0x00000000, 0x41700000, 0x00000000, 0x00000000, 0x00000000, 6205 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000}, 6206 {0x00000020, 0x00000000, 0x00000001, 0x00000000, 0x00000021, 0x00000000, 0x00000001, 0x00000000}, 6207 {0xffffffff, 0x00000000}}, 6208 {"vector", registerset_blob_vector, 12, 12, 3, 6209 {0x40a33333, 0x40a66666, 0x40a9999a, 0x00000000, 0x41300000, 0x42aa0000, 0x42780000, 0x00000000, 6210 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}, 6211 {0x00000007, 0x00000008, 0x00000009, 0x00000000, 0x00666e76, 0x41300000, 0x42aa0000, 0x42780000, 6212 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369}, 6213 {0xffffffff, 0x00000000, 0xffffffff}}, 6214 {"vector array", registerset_blob_vector_array, 24, 24, 6, 6215 {0x425c6666, 0x425ccccd, 0x425d3333, 0x00000000, 0x425d999a, 0x425e0000, 0x425e6666, 0x00000000, 6216 0x43020000, 0x430c0000, 0x43160000, 0x00000000, 0x43200000, 0x432a0000, 0x43340000, 0x00000000, 6217 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000}, 6218 {0x00000046, 0x00000050, 0x0000005a, 0x00000000, 0x00000064, 0x0000006e, 0x00000078, 0x00000000, 6219 0x666e6176, 0xababab00, 0x00020001, 0x00030001, 0x00000002, 0x00000000, 0x43020000, 0x430c0000, 6220 0x43160000, 0x00000000, 0x43200000, 0x432a0000, 0x43340000, 0x00000000, 0x335f7376, 0x4d00305f}, 6221 {0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}}, 6222 {"column", registerset_blob_column, 24, 24, 6, 6223 {0x4171999a, 0x4174cccd, 0x41780000, 0x00000000, 0x41733333, 0x41766666, 0x4179999a, 0x00000000, 6224 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 6225 0x41f00000, 0x42040000, 0x42080000, 0x00000000, 0x41f80000, 0x42000000, 0x42100000, 0x00000000}, 6226 {0x00000004, 0x00000006, 0x00000008, 0x00000000, 0x00000005, 0x00000007, 0x00000009, 0x00000000, 6227 0x00666e63, 0x41f00000, 0x42040000, 0x42080000, 0x00000000, 0x41f80000, 0x42000000, 0x42100000, 6228 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c}, 6229 {0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}}, 6230 {"column array", registerset_blob_column_array, 48, 48, 12, 6231 {0x3f8ccccd, 0x40533333, 0x40b00000, 0x00000000, 0x400ccccd, 0x408ccccd, 0x40d33333, 0x00000000, 6232 0x40f66666, 0x411e6666, 0x3fa66666, 0x00000000, 0x410ccccd, 0x3f99999a, 0x3fb33333, 0x00000000, 6233 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 6234 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 6235 0x43960000, 0x43978000, 0x43980000, 0x00000000, 0x43968000, 0x43970000, 0x43990000, 0x00000000, 6236 0x43af0000, 0x44238000, 0x43a30000, 0x00000000, 0x43b68000, 0x44190000, 0x4479c000, 0x00000000}, 6237 {0x0000000e, 0x00000010, 0x00000012, 0x00000000, 0x0000000f, 0x00000047, 0x00000013, 0x00000000, 6238 0x00000037, 0x00000060, 0x00000061, 0x00000000, 0x0000003f, 0x00000060, 0x0000000d, 0x00000000, 6239 0x666e6163, 0xababab00, 0x00020003, 0x00020003, 0x00000002, 0x00000000, 0x43960000, 0x43978000, 6240 0x43980000, 0x00000000, 0x43968000, 0x43970000, 0x43990000, 0x00000000, 0x43af0000, 0x44238000, 6241 0x43a30000, 0x00000000, 0x43b68000, 0x44190000, 0x4479c000, 0x00000000, 0x335f7376, 0x4d00305f, 6242 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970}, 6243 {0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 6244 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}}, 6245 {"row", registerset_blob_row, 36, 24, 6, 6246 {0x42be3333, 0x42be6666, 0x00000000, 0x00000000, 0x42be999a, 0x42becccd, 0x00000000, 0x00000000, 6247 0x42bf0000, 0x42bf3333, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 6248 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 6249 0x42140000, 0x41500000, 0x00000000, 0x00000000, 0x42c40000, 0x42580000, 0x00000000, 0x00000000, 6250 0x429a0000, 0x42100000, 0x00000000, 0x00000000}, 6251 {0x00000050, 0x00000051, 0x00000001, 0x00000000, 0x00000052, 0x00000053, 0x00000001, 0x00000000, 6252 0x00000054, 0x00000055, 0x00000001, 0x00000000, 0x00666e72, 0x42140000, 0x41500000, 0x00000000, 6253 0x00000000, 0x42c40000, 0x42580000, 0x00000000, 0x00000000, 0x429a0000, 0x42100000, 0x00000000}, 6254 {0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff}}, 6255 {"row array", registerset_blob_row_array, 72, 48, 12, 6256 {0x3fc00000, 0x40333333, 0x00000000, 0x00000000, 0x40533333, 0x409ccccd, 0x00000000, 0x00000000, 6257 0x40bccccd, 0x40d9999a, 0x00000000, 0x00000000, 0x40fccccd, 0x41080000, 0x00000000, 0x00000000, 6258 0x41166666, 0x3fa66666, 0x00000000, 0x00000000, 0x3f99999a, 0x3f8ccccd, 0x00000000, 0x00000000, 6259 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 6260 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 6261 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x00000000, 6262 0x420c0000, 0x42200000, 0x00000000, 0x00000000, 0x42700000, 0x42a00000, 0x00000000, 0x00000000, 6263 0x428c0000, 0x42600000, 0x00000000, 0x00000000, 0x42140000, 0x41500000, 0x00000000, 0x00000000, 6264 0x42c40000, 0x42580000, 0x00000000, 0x00000000, 0x429a0000, 0x42100000, 0x00000000, 0x00000000}, 6265 {0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000006, 0x00000001, 0x00000001, 0x00000000, 6266 0x00000008, 0x00000001, 0x00000001, 0x00000000, 0x00000005, 0x00000003, 0x00000001, 0x00000000, 6267 0x00000009, 0x00000006, 0x00000001, 0x00000000, 0x00000007, 0x00000003, 0x00000001, 0x00000000, 6268 0x666e6172, 0xababab00, 0x00020002, 0x00020003, 0x00000002, 0x00000000, 0x420c0000, 0x42200000, 6269 0x00000000, 0x00000000, 0x42700000, 0x42a00000, 0x00000000, 0x00000000, 0x428c0000, 0x42600000, 6270 0x00000000, 0x00000000, 0x42140000, 0x41500000, 0x00000000, 0x00000000, 0x42c40000, 0x42580000}, 6271 {0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 6272 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}}, 6273 {"struct", registerset_blob_struct, 24, 16, 4, 6274 {0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 0x400ccccd, 0x40533333, 0x408ccccd, 0x00000000, 6275 0x41f80000, 0x00000000, 0x00000000, 0x00000000, 0x42000000, 0x42040000, 0x42080000, 0x00000000, 6276 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000}, 6277 {0x0000000b, 0x00000000, 0x00000001, 0x00000000, 0x0000000c, 0x0000000d, 0x0000000e, 0x00000000, 6278 0x00666e73, 0x7600666e, 0xab00666e, 0x00000204, 0x0000019c, 0x00000207, 0x000001b0, 0x00000005}, 6279 {0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}}, 6280 {"struct array", registerset_blob_struct_array, 48, 32, 8, 6281 {0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 0x40066666, 0x40466666, 0x40833333, 0x00000000, 6282 0x40a33333, 0x00000000, 0x00000000, 0x00000000, 0x40c33333, 0x40e33333, 0x4101999a, 0x00000000, 6283 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x422c0000, 0x42300000, 0x00000000, 6284 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x42280000, 0x422c0000, 0x42300000, 0x00000000, 6285 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 6286 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x00000000, 0x3f800000, 0x00000000}, 6287 {0x00000015, 0x00000000, 0x00000001, 0x00000000, 0x00000016, 0x00000017, 0x00000018, 0x00000000, 6288 0x00000019, 0x00000000, 0x00000001, 0x00000000, 0x0000001a, 0x0000001b, 0x0000001c, 0x00000000, 6289 0x666e6173, 0x00666e00, 0x00666e76, 0x00000275, 0x000001ec, 0x00000278, 0x00000200, 0x00000005, 6290 0x00040001, 0x00020002, 0x0000027c, 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 6291 {0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff}}, 6292 {"struct struct", registerset_blob_struct_struct, 48, 24, 6, 6293 {0x3f8ccccd, 0x00000000, 0x00000000, 0x00000000, 0x40066666, 0x00000000, 0x00000000, 0x00000000, 6294 0x40466666, 0x40833333, 0x40a33333, 0x00000000, 0x40c33333, 0x00000000, 0x00000000, 0x00000000, 6295 0x42240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6296 0x422c0000, 0x42300000, 0x42240000, 0x00000000, 0x42280000, 0x00000000, 0x00000000, 0x00000000, 6297 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6298 0x00000000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 6299 {0x00000047, 0x00000000, 0x00000001, 0x00000000, 0x00000048, 0x00000000, 0x00000001, 0x00000000, 6300 0x00000049, 0x0000004a, 0x0000004b, 0x00000000, 0x0000004c, 0x00000000, 0x00000001, 0x00000000, 6301 0x666e7373, 0x00666e00, 0x00666e76, 0x00000321, 0x0000026c, 0x00000324, 0x00000280, 0x00000005}, 6302 {0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000}}, 6303 {"int ran", registerset_blob_special_int, 0, 36, 0, 6304 {0x00000000}, 6305 {0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000006, 0x00000001, 0x00000001, 0x00000000, 6306 0x00000008, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000000, 6307 0x00000004, 0x00000007, 0x00000001, 0x00000000, 0x00000009, 0x00000001, 0x00000001, 0x00000000, 6308 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 6309 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932}, 6310 {0x00000000}}, 6311 /* DefaultValue = NULL */ 6312 {"big vector", registerset_blob_bigvec}, 6313 {"matrix column clamp", registerset_blob_matrix_column_clamp, 12, 0, 0, 6314 {0x3f8ccccd, 0x40b00000, 0x411e6666, 0x3fc00000, 0x400ccccd, 0x40d33333, 0x3f99999a, 0x3fcccccd, 6315 0x420551ec, 0x00000000, 0x00000000, 0x00000000}, 6316 {0x00000000}, 6317 {0x00000000}}, 6318 }; 6319 6320 static void test_registerset_defaults(void) 6321 { 6322 UINT k; 6323 HWND wnd; 6324 IDirect3D9 *d3d; 6325 IDirect3DDevice9 *device; 6326 D3DPRESENT_PARAMETERS d3dpp; 6327 HRESULT hr; 6328 ULONG count; 6329 D3DCAPS9 caps; 6330 6331 if (!(wnd = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0, 6332 640, 480, NULL, NULL, NULL, NULL))) 6333 { 6334 skip("Couldn't create application window\n"); 6335 return; 6336 } 6337 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION))) 6338 { 6339 skip("Couldn't create IDirect3D9 object\n"); 6340 DestroyWindow(wnd); 6341 return; 6342 } 6343 6344 ZeroMemory(&d3dpp, sizeof(d3dpp)); 6345 d3dpp.Windowed = TRUE; 6346 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 6347 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &device); 6348 if (FAILED(hr)) 6349 { 6350 skip("Failed to create IDirect3DDevice9 object %#x\n", hr); 6351 IDirect3D9_Release(d3d); 6352 DestroyWindow(wnd); 6353 return; 6354 } 6355 6356 hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); 6357 ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr); 6358 if (caps.VertexShaderVersion < D3DVS_VERSION(3, 0) 6359 || caps.PixelShaderVersion < D3DPS_VERSION(3, 0)) 6360 { 6361 skip("Skipping: Test requires VS >= 3 and PS >= 3.\n"); 6362 IDirect3DDevice9_Release(device); 6363 IDirect3D9_Release(d3d); 6364 DestroyWindow(wnd); 6365 return; 6366 } 6367 6368 for (k = 0; k < ARRAY_SIZE(registerset_defaults_data); ++k) 6369 { 6370 const char *tablename = registerset_defaults_data[k].name; 6371 ID3DXConstantTable *ctable; 6372 D3DXCONSTANTTABLE_DESC tdesc; 6373 BOOL is_vs; 6374 UINT ret; 6375 6376 hr = D3DXGetShaderConstantTable(registerset_defaults_data[k].blob, &ctable); 6377 ok(hr == D3D_OK, "D3DXGetShaderConstantTable \"%s\" failed, got %08x, expected %08x\n", tablename, hr, D3D_OK); 6378 6379 hr = ID3DXConstantTable_GetDesc(ctable, &tdesc); 6380 ok(hr == D3D_OK, "GetDesc \"%s\" failed, got %08x, expected %08x\n", tablename, hr, D3D_OK); 6381 6382 is_vs = (tdesc.Version & 0xFFFF0000) == 0xFFFE0000; 6383 6384 registerset_clear(device); 6385 6386 hr = ID3DXConstantTable_SetDefaults(ctable, device); 6387 ok(hr == D3D_OK, "SetDefaults \"%s\" failed, got %08x, expected %08x\n", tablename, hr, D3D_OK); 6388 6389 ret = registerset_compare(device, is_vs, D3DXRS_FLOAT4, 0, registerset_defaults_data[k].float_count, 6390 registerset_defaults_data[k].floats); 6391 ok(ret == 0, "Get*ShaderConstantF \"%s\" failed\n", tablename); 6392 6393 ret = registerset_compare(device, is_vs, D3DXRS_INT4, 0, registerset_defaults_data[k].int_count, 6394 registerset_defaults_data[k].ints); 6395 ok(ret == 0, "Get*ShaderConstantI \"%s\" failed\n", tablename); 6396 6397 ret = registerset_compare(device, is_vs, D3DXRS_BOOL, 0, registerset_defaults_data[k].bool_count, 6398 registerset_defaults_data[k].bools); 6399 ok(ret == 0, "Get*ShaderConstantB \"%s\" failed\n", tablename); 6400 6401 count = ID3DXConstantTable_Release(ctable); 6402 ok(count == 0, "Release \"%s\" failed, got %u, expected %u\n", tablename, count, 0); 6403 } 6404 6405 /* Release resources */ 6406 count = IDirect3DDevice9_Release(device); 6407 ok(count == 0, "The Direct3D device reference count was %u, should be 0\n", count); 6408 6409 count = IDirect3D9_Release(d3d); 6410 ok(count == 0, "The Direct3D object reference count was %u, should be 0\n", count); 6411 6412 if (wnd) DestroyWindow(wnd); 6413 } 6414 6415 static void test_shader_semantics(void) 6416 { 6417 static const DWORD invalid_1[] = 6418 { 6419 0x00000200 6420 }, 6421 invalid_2[] = 6422 { 6423 0xfffe0400 6424 }, 6425 invalid_3[] = 6426 { 6427 0xfffe0000 6428 }, 6429 vs_1_1[] = 6430 { 6431 0xfffe0101, /* vs_1_1 */ 6432 0x0000001f, 0x80000000, 0x900f0000, /* dcl_position v0 */ 6433 0x0000001f, 0x80000003, 0x900f0001, /* dcl_normal v1 */ 6434 0x0000001f, 0x8001000a, 0x900f0002, /* dcl_color1 v2 */ 6435 0x0000001f, 0x80000005, 0x900f0003, /* dcl_texcoord0 v3 */ 6436 0x00000001, 0xc00f0000, 0x90e40000, /* mov oPos, v0 */ 6437 0x00000001, 0xd00f0001, 0x90e40002, /* mov oD1, v2 */ 6438 0x00000001, 0xe0070000, 0x90e40001, /* mov oT0.xyz, v1 */ 6439 0x00000001, 0xc00f0001, 0x90ff0002, /* mov oFog, v2.w */ 6440 0x00000001, 0xc00f0002, 0x90ff0001, /* mov oPts, v1.w */ 6441 0x0000ffff 6442 }, 6443 vs_2_0[] = 6444 { 6445 0xfffe0200, /* vs_2_0 */ 6446 0x0200001f, 0x80000000, 0x900f0000, /* dcl_position v0 */ 6447 0x0200001f, 0x80000003, 0x900f0001, /* dcl_normal v1 */ 6448 0x0200001f, 0x8001000a, 0x900f0002, /* dcl_color1 v2 */ 6449 0x0200001f, 0x80000005, 0x900f0003, /* dcl_texcoord0 v3 */ 6450 0x02000001, 0xc00f0000, 0x90e40000, /* mov oPos, v0 */ 6451 0x02000001, 0xd00f0001, 0x90e40002, /* mov oD1, v2 */ 6452 0x02000001, 0xe0070000, 0x90e40003, /* mov oT0.xyz, v3 */ 6453 0x02000001, 0xc00f0001, 0x90ff0002, /* mov oFog, v2.w */ 6454 0x02000001, 0xc00f0002, 0x90ff0001, /* mov oPts, v1.w */ 6455 0x0000ffff 6456 }, 6457 vs_3_0[] = 6458 { 6459 0xfffe0300, /* vs_3_0 */ 6460 0x0002fffe, 0x0200000f, 0x00000000, /* comment */ 6461 0x0200001f, 0x80000000, 0x900f0000, /* dcl_position v0 */ 6462 0x0200001f, 0x80000003, 0x900f0001, /* dcl_normal v1 */ 6463 0x0200001f, 0x8001000a, 0x900f0002, /* dcl_color1 v2 */ 6464 0x0200001f, 0x80000005, 0x900f0003, /* dcl_texcoord0 v3 */ 6465 0x0200001f, 0x80000000, 0xe00f0000, /* dcl_position o0 */ 6466 0x0200001f, 0x8001000a, 0xe00f0001, /* dcl_color1 o1 */ 6467 0x0200001f, 0x80000005, 0xe00f0002, /* dcl_texcoord0 o2 */ 6468 0x0200001f, 0x8000000b, 0xe00f0003, /* dcl_fog o3 */ 6469 0x0200001f, 0x80000004, 0xe00f0004, /* dcl_psize o4 */ 6470 0x02000001, 0xe00f0000, 0x90e40000, /* mov o0, v0 */ 6471 0x02000001, 0xe00f0001, 0x90e40002, /* mov o1, v2 */ 6472 0x02000001, 0xe0070002, 0x90e40003, /* mov o2.xyz, v3 */ 6473 0x02000001, 0xe00f0003, 0x90ff0002, /* mov o3, v2.w */ 6474 0x02000001, 0xe00f0004, 0x90ff0001, /* mov o4, v1.w */ 6475 0x0000ffff 6476 }, 6477 ps_1_1[] = 6478 { 6479 0xffff0101, /* ps_1_1 */ 6480 0x00000042, 0xb00f0000, /* tex t0 */ 6481 0x00000002, 0x800f0000, 0x90e40000, 0xb0e40000, /* add r0, v0, t0 */ 6482 0x0000ffff 6483 }, 6484 ps_2_0[] = 6485 { 6486 0xffff0200, /* ps_2_0 */ 6487 0x0200001f, 0x80000000, 0x900f0000, /* dcl v0 */ 6488 0x0200001f, 0x80000000, 0xb00f0000, /* dcl t0 */ 6489 0x02000001, 0x800f0800, 0x90e40000, /* mov oC0, v0 */ 6490 0x0000ffff 6491 }, 6492 ps_3_0[] = 6493 { 6494 0xffff0300, /* ps_3_0 */ 6495 0x0200001f, 0x8001000a, 0x900f0000, /* dcl_color1 v0 */ 6496 0x0200001f, 0x80000003, 0x900f0001, /* dcl_normal v1 */ 6497 0x0200001f, 0x80000005, 0x900f0002, /* dcl_texcoord0 v2 */ 6498 0x0200001f, 0x8000000b, 0x900f0003, /* dcl_fog v3 */ 6499 0x0200001f, 0x80000000, 0x90031000, /* dcl vPos.xy */ 6500 0x0200001f, 0x80000000, 0x900f1001, /* dcl vFace */ 6501 0x05000051, 0xa00f0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* def c0, 0.0, 0.0, 0.0, 0.0 */ 6502 0x02000001, 0x800f0000, 0x90e40000, /* mov r0, v0 */ 6503 0x03000002, 0x800f0800, 0x80e40000, 0x90e40003, /* add oC0, r0, v3 */ 6504 0x02000001, 0x800f0001, 0x90e40001, /* mov r1, v1 */ 6505 0x03000005, 0x800f0801, 0x80e40001, 0x90e40002, /* mul oC1, r1, v2 */ 6506 0x02000001, 0x800f0802, 0x90441000, /* mov oC2, vPos.xyxy */ 6507 0x04000058, 0x800f0803, 0x90e41001, 0x90e40000, 0xa0e40000, /* cmp oC3, vFace, v0, c0 */ 6508 0x02000001, 0x900f0800, 0x90ff0001, /* mov oDepth, v1.w */ 6509 0x0000ffff 6510 }; 6511 static const struct 6512 { 6513 const DWORD *shader; 6514 D3DXSEMANTIC expected_input[MAXD3DDECLLENGTH]; 6515 D3DXSEMANTIC expected_output[MAXD3DDECLLENGTH]; 6516 } 6517 tests[] = 6518 { 6519 {vs_1_1, {{0, 0}, {3, 0}, {10, 1}, {5, 0}, {~0, ~0}}, {{5, 0}, {10, 1}, {0, 0}, {11, 0}, {4, 0}, {~0, ~0}}}, 6520 {vs_2_0, {{0, 0}, {3, 0}, {10, 1}, {5, 0}, {~0, ~0}}, {{5, 0}, {10, 1}, {0, 0}, {11, 0}, {4, 0}, {~0, ~0}}}, 6521 {vs_3_0, {{0, 0}, {3, 0}, {10, 1}, {5, 0}, {~0, ~0}}, {{0, 0}, {10, 1}, {5, 0}, {11, 0}, {4, 0}, {~0, ~0}}}, 6522 {ps_1_1, {{5, 0}, {10, 0}, {~0, ~0}}, {{10, 0}, {~0, ~0}}}, 6523 {ps_2_0, {{10, 0}, {5, 0}, {~0, ~0}}, {{10, 0}, {~0, ~0}}}, 6524 {ps_3_0, {{10, 1}, {3,0}, {5, 0}, {11, 0}, {~0, ~0}}, {{10, 0}, {10, 1}, {10, 2}, {10, 3}, {12, 0}, {~0, ~0}}}, 6525 }; 6526 D3DXSEMANTIC semantics[MAXD3DDECLLENGTH]; 6527 unsigned int count, count2; 6528 unsigned int i, j; 6529 HRESULT hr; 6530 6531 hr = D3DXGetShaderInputSemantics(invalid_1, NULL, NULL); 6532 ok(hr == D3DXERR_INVALIDDATA, "Unexpected hr %#x.\n", hr); 6533 hr = D3DXGetShaderInputSemantics(invalid_2, NULL, NULL); 6534 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6535 hr = D3DXGetShaderInputSemantics(invalid_3, NULL, NULL); 6536 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6537 6538 hr = D3DXGetShaderInputSemantics(vs_1_1, NULL, NULL); 6539 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6540 hr = D3DXGetShaderInputSemantics(vs_1_1, semantics, NULL); 6541 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6542 6543 for (i = 0; i < ARRAY_SIZE(tests); ++i) 6544 { 6545 const DWORD *shader = tests[i].shader; 6546 6547 hr = D3DXGetShaderInputSemantics(shader, NULL, &count); 6548 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6549 hr = D3DXGetShaderInputSemantics(shader, semantics, &count2); 6550 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6551 ok(count == count2, "Semantics count %u differs from previous count %u.\n", count2, count); 6552 for (j = 0; j < count; ++j) 6553 { 6554 ok(semantics[j].Usage == tests[i].expected_input[j].Usage 6555 && semantics[j].UsageIndex == tests[i].expected_input[j].UsageIndex, 6556 "Unexpected semantic %u, %u, test %u, idx %u.\n", 6557 semantics[j].Usage, semantics[j].UsageIndex, i, j); 6558 } 6559 ok(tests[i].expected_input[j].Usage == ~0 && tests[i].expected_input[j].UsageIndex == ~0, 6560 "Unexpected semantics count %u.\n", count); 6561 hr = D3DXGetShaderOutputSemantics(shader, NULL, &count); 6562 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6563 hr = D3DXGetShaderOutputSemantics(shader, semantics, &count2); 6564 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6565 ok(count == count2, "Semantics count %u differs from previous count %u.\n", count2, count); 6566 for (j = 0; j < count; ++j) 6567 { 6568 ok(semantics[j].Usage == tests[i].expected_output[j].Usage 6569 && semantics[j].UsageIndex == tests[i].expected_output[j].UsageIndex, 6570 "Unexpected semantic %u, %u, test %u, idx %u.\n", 6571 semantics[j].Usage, semantics[j].UsageIndex, i, j); 6572 } 6573 ok(tests[i].expected_output[j].Usage == ~0 && tests[i].expected_output[j].UsageIndex == ~0, 6574 "Unexpected semantics count %u.\n", count); 6575 } 6576 } 6577 6578 static void test_fragment_linker(void) 6579 { 6580 ID3DXFragmentLinker *linker; 6581 D3DPRESENT_PARAMETERS d3dpp; 6582 IDirect3DDevice9 *device; 6583 IDirect3D9 *d3d; 6584 ULONG refcount; 6585 HWND window; 6586 HRESULT hr; 6587 6588 window = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, NULL, NULL); 6589 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION))) 6590 { 6591 skip("Failed to create a D3D object.\n"); 6592 DestroyWindow(window); 6593 return; 6594 } 6595 6596 ZeroMemory(&d3dpp, sizeof(d3dpp)); 6597 d3dpp.Windowed = TRUE; 6598 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 6599 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, 6600 D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &device); 6601 if (FAILED(hr)) 6602 { 6603 skip("Failed to create a D3D device, hr %#x.\n", hr); 6604 IDirect3D9_Release(d3d); 6605 DestroyWindow(window); 6606 return; 6607 } 6608 6609 hr = D3DXCreateFragmentLinker(device, 1024, &linker); 6610 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6611 ok(!!linker, "Unexpected linker %p.\n", linker); 6612 linker->lpVtbl->Release(linker); 6613 6614 hr = D3DXCreateFragmentLinkerEx(device, 1024, 0, &linker); 6615 ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr); 6616 ok(!!linker, "Unexpected linker %p.\n", linker); 6617 linker->lpVtbl->Release(linker); 6618 6619 refcount = IDirect3DDevice9_Release(device); 6620 ok(!refcount, "Device has %u references left.\n", refcount); 6621 refcount = IDirect3D9_Release(d3d); 6622 ok(!refcount, "The D3D object has %u references left.\n", refcount); 6623 DestroyWindow(window); 6624 } 6625 6626 static const DWORD ps_tex[] = { 6627 0xffff0103, /* ps_1_3 */ 6628 0x00000042, 0xb00f0000, /* tex t0 */ 6629 0x00000000, /* nop */ 6630 0x0000ffff}; 6631 6632 static const DWORD ps_texld_1_4[] = { 6633 0xffff0104, /* ps_1_4 */ 6634 0x00000042, 0xb00f0000, 0xa0e40000, /* texld t0, c0 */ 6635 0x00000000, /* nop */ 6636 0x0000ffff}; 6637 6638 static const DWORD ps_texld_2_0[] = { 6639 0xffff0200, /* ps_2_0 */ 6640 0x00000042, 0xb00f0000, 0xa0e40000, 0xa0e40001, /* texld t0, c0, c1 */ 6641 0x00000000, /* nop */ 6642 0x0000ffff}; 6643 6644 static const DWORD ps_texcoord[] = { 6645 0xffff0103, /* ps_1_4 */ 6646 0x00000040, 0xb00f0000, /* texcoord t0 */ 6647 0x00000000, /* nop */ 6648 0x0000ffff}; 6649 6650 static const DWORD ps_texcrd[] = { 6651 0xffff0104, /* ps_2_0 */ 6652 0x00000040, 0xb00f0000, 0xa0e40000, /* texcrd t0, c0 */ 6653 0x00000000, /* nop */ 6654 0x0000ffff}; 6655 6656 static const DWORD ps_sincos_2_0[] = { 6657 0xffff0200, /* ps_2_0 */ 6658 0x00000025, 0xb00f0000, 0xa0e40000, 0xa0e40001, 0xa0e40002, /* sincos t0, c0, c1, c2 */ 6659 0x00000000, /* nop */ 6660 0x0000ffff}; 6661 6662 static const DWORD ps_sincos_3_0[] = { 6663 0xffff0300, /* ps_3_0 */ 6664 0x00000025, 0xb00f0000, 0xa0e40000, /* sincos t0, c0 */ 6665 0x00000000, /* nop */ 6666 0x0000ffff}; 6667 6668 static const DWORD vs_sincos_2_0[] = { 6669 0xfffe0200, /* vs_2_0 */ 6670 0x00000025, 0xb00f0000, 0xa0e40000, 0xa0e40001, 0xa0e40002, /* sincos a0, c0, c1, c2 */ 6671 0x00000000, /* nop */ 6672 0x0000ffff}; 6673 6674 static const DWORD vs_sincos_3_0[] = { 6675 0xfffe0300, /* vs_3_0 */ 6676 0x00000025, 0xb00f0000, 0xa0e40000, /* sincos a0, c0 */ 6677 0x00000000, /* nop */ 6678 0x0000ffff}; 6679 6680 static void test_disassemble_shader(void) 6681 { 6682 static const char disasm_vs[] = " vs_1_1\n" 6683 " dcl_position v0\n" 6684 " dp4 oPos.x, v0, c0\n" 6685 " dp4 oPos.y, v0, c1\n" 6686 " dp4 oPos.z, v0, c2\n" 6687 " dp4 oPos.w, v0, c3\n"; 6688 static const char disasm_ps[] = " ps_1_1\n" 6689 " def c1, 1, 0, 0, 0\n" 6690 " tex t0\n" 6691 " dp3 r0, c1, c0\n" 6692 " mul r0, v0, r0\n" 6693 " mul r0, t0, r0\n"; 6694 static const char disasm_ps_tex[] = " ps_1_3\n" 6695 " tex t0\n" 6696 " nop\n"; 6697 static const char disasm_ps_texld_1_4[] = " ps_1_4\n" 6698 " texld t0, c0\n" 6699 " nop\n"; 6700 static const char disasm_ps_texld_2_0[] = " ps_2_0\n" 6701 " texld t0, c0, c1\n" 6702 " nop\n"; 6703 static const char disasm_ps_texcoord[] = " ps_1_3\n" 6704 " texcoord t0\n" 6705 " nop\n"; 6706 static const char disasm_ps_texcrd[] = " ps_1_4\n" 6707 " texcrd t0, c0\n" 6708 " nop\n"; 6709 static const char disasm_ps_sincos_2_0[] = " ps_2_0\n" 6710 " sincos t0, c0, c1, c2\n" 6711 " nop\n"; 6712 static const char disasm_ps_sincos_3_0[] = " ps_3_0\n" 6713 " sincos t0, c0\n" 6714 " nop\n"; 6715 static const char disasm_vs_sincos_2_0[] = " vs_2_0\n" 6716 " sincos a0, c0, c1, c2\n" 6717 " nop\n"; 6718 static const char disasm_vs_sincos_3_0[] = " vs_3_0\n" 6719 " sincos a0, c0\n" 6720 " nop\n"; 6721 ID3DXBuffer *disassembly; 6722 HRESULT ret; 6723 char *ptr; 6724 6725 /* Check wrong parameters */ 6726 ret = D3DXDisassembleShader(NULL, FALSE, NULL, NULL); 6727 ok(ret == D3DERR_INVALIDCALL, "Returned %#x, expected %#x\n", ret, D3DERR_INVALIDCALL); 6728 ret = D3DXDisassembleShader(NULL, FALSE, NULL, &disassembly); 6729 ok(ret == D3DERR_INVALIDCALL, "Returned %#x, expected %#x\n", ret, D3DERR_INVALIDCALL); 6730 ret = D3DXDisassembleShader(simple_vs, FALSE, NULL, NULL); 6731 ok(ret == D3DERR_INVALIDCALL, "Returned %#x, expected %#x\n", ret, D3DERR_INVALIDCALL); 6732 6733 /* Test with vertex shader */ 6734 disassembly = (void *)0xdeadbeef; 6735 ret = D3DXDisassembleShader(simple_vs, FALSE, NULL, &disassembly); 6736 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6737 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6738 ok(!memcmp(ptr, disasm_vs, sizeof(disasm_vs) - 1), /* compare beginning */ 6739 "Returned '%s', expected '%s'\n", ptr, disasm_vs); 6740 ID3DXBuffer_Release(disassembly); 6741 6742 /* Test with pixel shader */ 6743 disassembly = (void *)0xdeadbeef; 6744 ret = D3DXDisassembleShader(simple_ps, FALSE, NULL, &disassembly); 6745 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6746 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6747 ok(!memcmp(ptr, disasm_ps, sizeof(disasm_ps) - 1), /* compare beginning */ 6748 "Returned '%s', expected '%s'\n", ptr, disasm_ps); 6749 ID3DXBuffer_Release(disassembly); 6750 6751 /* Test tex instruction with pixel shader 1.3 */ 6752 disassembly = (void *)0xdeadbeef; 6753 ret = D3DXDisassembleShader(ps_tex, FALSE, NULL, &disassembly); 6754 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6755 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6756 ok(!memcmp(ptr, disasm_ps_tex, sizeof(disasm_ps_tex) - 1), /* compare beginning */ 6757 "Returned '%s', expected '%s'\n", ptr, disasm_ps_tex); 6758 ID3DXBuffer_Release(disassembly); 6759 6760 /* Test texld instruction with pixel shader 1.4 */ 6761 disassembly = (void *)0xdeadbeef; 6762 ret = D3DXDisassembleShader(ps_texld_1_4, FALSE, NULL, &disassembly); 6763 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6764 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6765 ok(!memcmp(ptr, disasm_ps_texld_1_4, sizeof(disasm_ps_texld_1_4) - 1), /* compare beginning */ 6766 "Returned '%s', expected '%s'\n", ptr, disasm_ps_texld_1_4); 6767 ID3DXBuffer_Release(disassembly); 6768 6769 /* Test texld instruction with pixel shader 2.0 */ 6770 disassembly = (void *)0xdeadbeef; 6771 ret = D3DXDisassembleShader(ps_texld_2_0, FALSE, NULL, &disassembly); 6772 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6773 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6774 ok(!memcmp(ptr, disasm_ps_texld_2_0, sizeof(disasm_ps_texld_2_0) - 1), /* compare beginning */ 6775 "Returned '%s', expected '%s'\n", ptr, disasm_ps_texld_2_0); 6776 ID3DXBuffer_Release(disassembly); 6777 6778 /* Test texcoord instruction with pixel shader 1.3 */ 6779 disassembly = (void *)0xdeadbeef; 6780 ret = D3DXDisassembleShader(ps_texcoord, FALSE, NULL, &disassembly); 6781 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6782 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6783 ok(!memcmp(ptr, disasm_ps_texcoord, sizeof(disasm_ps_texcoord) - 1), /* compare beginning */ 6784 "Returned '%s', expected '%s'\n", ptr, disasm_ps_texcoord); 6785 ID3DXBuffer_Release(disassembly); 6786 6787 /* Test texcrd instruction with pixel shader 1.4 */ 6788 disassembly = (void *)0xdeadbeef; 6789 ret = D3DXDisassembleShader(ps_texcrd, FALSE, NULL, &disassembly); 6790 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6791 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6792 ok(!memcmp(ptr, disasm_ps_texcrd, sizeof(disasm_ps_texcrd) - 1), /* compare beginning */ 6793 "Returned '%s', expected '%s'\n", ptr, disasm_ps_texcrd); 6794 ID3DXBuffer_Release(disassembly); 6795 6796 /* Test sincos instruction pixel shader 2.0 */ 6797 disassembly = (void *)0xdeadbeef; 6798 ret = D3DXDisassembleShader(ps_sincos_2_0, FALSE, NULL, &disassembly); 6799 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6800 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6801 ok(!memcmp(ptr, disasm_ps_sincos_2_0, sizeof(disasm_ps_sincos_2_0) - 1), /* compare beginning */ 6802 "Returned '%s', expected '%s'\n", ptr, disasm_ps_sincos_2_0); 6803 ID3DXBuffer_Release(disassembly); 6804 6805 /* Test sincos instruction with pixel shader 3.0 */ 6806 disassembly = (void *)0xdeadbeef; 6807 ret = D3DXDisassembleShader(ps_sincos_3_0, FALSE, NULL, &disassembly); 6808 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6809 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6810 ok(!memcmp(ptr, disasm_ps_sincos_3_0, sizeof(disasm_ps_sincos_3_0) - 1), /* compare beginning */ 6811 "Returned '%s', expected '%s'\n", ptr, disasm_ps_sincos_3_0); 6812 ID3DXBuffer_Release(disassembly); 6813 6814 /* Test sincos instruction with pixel shader 2.0 */ 6815 disassembly = (void *)0xdeadbeef; 6816 ret = D3DXDisassembleShader(vs_sincos_2_0, FALSE, NULL, &disassembly); 6817 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6818 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6819 ok(!memcmp(ptr, disasm_vs_sincos_2_0, sizeof(disasm_vs_sincos_2_0) - 1), /* compare beginning */ 6820 "Returned '%s', expected '%s'\n", ptr, disasm_vs_sincos_2_0); 6821 ID3DXBuffer_Release(disassembly); 6822 6823 /* Test sincos instruction with pixel shader 3.0 */ 6824 disassembly = (void *)0xdeadbeef; 6825 ret = D3DXDisassembleShader(vs_sincos_3_0, FALSE, NULL, &disassembly); 6826 ok(ret == D3D_OK, "Failed with %#x\n", ret); 6827 ptr = ID3DXBuffer_GetBufferPointer(disassembly); 6828 ok(!memcmp(ptr, disasm_vs_sincos_3_0, sizeof(disasm_vs_sincos_3_0) - 1), /* compare beginning */ 6829 "Returned '%s', expected '%s'\n", ptr, disasm_vs_sincos_3_0); 6830 ID3DXBuffer_Release(disassembly); 6831 6832 } 6833 6834 START_TEST(shader) 6835 { 6836 test_get_shader_size(); 6837 test_get_shader_version(); 6838 test_find_shader_comment(); 6839 test_get_shader_constant_table_ex(); 6840 test_constant_tables(); 6841 test_setting_constants(); 6842 test_get_sampler_index(); 6843 test_get_shader_samplers(); 6844 test_get_shader_constant_variables(); 6845 test_registerset(); 6846 test_registerset_defaults(); 6847 test_shader_semantics(); 6848 test_fragment_linker(); 6849 test_disassemble_shader(); 6850 } 6851