ReactOS 0.4.17-dev-966-gf06eace
shader.c
Go to the documentation of this file.
1/*
2 * Copyright 2008 Luis Busquets
3 * Copyright 2009 Matteo Bruni
4 * Copyright 2011 Travis Athougies
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <assert.h>
22
23#include "d3dx9_private.h"
24#include "d3dcommon.h"
25#include "d3dcompiler.h"
26
28
30{
31 return (token & 0xfffe0000) == 0xfffe0000;
32}
33
35{
36 D3DCAPS9 caps;
37
38 TRACE("device %p\n", device);
39
40 if (!device) return NULL;
41
43
44 switch (caps.PixelShaderVersion)
45 {
46 case D3DPS_VERSION(1, 1):
47 return "ps_1_1";
48
49 case D3DPS_VERSION(1, 2):
50 return "ps_1_2";
51
52 case D3DPS_VERSION(1, 3):
53 return "ps_1_3";
54
55 case D3DPS_VERSION(1, 4):
56 return "ps_1_4";
57
58 case D3DPS_VERSION(2, 0):
59 if ((caps.PS20Caps.NumTemps>=22) &&
65 {
66 return "ps_2_a";
67 }
68 if ((caps.PS20Caps.NumTemps>=32) &&
70 {
71 return "ps_2_b";
72 }
73 return "ps_2_0";
74
75 case D3DPS_VERSION(3, 0):
76 return "ps_3_0";
77 }
78
79 return NULL;
80}
81
83{
84 const DWORD *ptr = byte_code;
85
86 TRACE("byte_code %p\n", byte_code);
87
88 if (!ptr) return 0;
89
90 /* Look for the END token, skipping the VERSION token */
91 while (*++ptr != D3DSIO_END)
92 {
93 /* Skip comments */
95 {
97 }
98 }
99 ++ptr;
100
101 /* Return the shader size in bytes */
102 return (ptr - byte_code) * sizeof(*ptr);
103}
104
106{
107 TRACE("byte_code %p\n", byte_code);
108
109 return byte_code ? *byte_code : 0;
110}
111
113{
114 D3DCAPS9 caps;
115
116 TRACE("device %p\n", device);
117
118 if (!device) return NULL;
119
121
122 switch (caps.VertexShaderVersion)
123 {
124 case D3DVS_VERSION(1, 1):
125 return "vs_1_1";
126 case D3DVS_VERSION(2, 0):
127 if ((caps.VS20Caps.NumTemps>=13) &&
130 {
131 return "vs_2_a";
132 }
133 return "vs_2_0";
134 case D3DVS_VERSION(3, 0):
135 return "vs_3_0";
136 }
137
138 return NULL;
139}
140
141HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size)
142{
143 const DWORD *ptr = byte_code;
145
146 TRACE("byte_code %p, fourcc %#lx, data %p, size %p.\n", byte_code, fourcc, data, size);
147
148 if (data) *data = NULL;
149 if (size) *size = 0;
150
151 if (!byte_code) return D3DERR_INVALIDCALL;
152
153 version = *ptr >> 16;
154 if (version != 0x4658 /* FX */
155 && version != 0x5458 /* TX */
156 && version != 0x7ffe
157 && version != 0x7fff
158 && version != 0xfffe /* VS */
159 && version != 0xffff) /* PS */
160 {
161 WARN("Invalid data supplied\n");
162 return D3DXERR_INVALIDDATA;
163 }
164
165 while (*++ptr != D3DSIO_END)
166 {
167 /* Check if it is a comment */
169 {
171
172 /* Check if this is the comment we are looking for */
173 if (*(ptr + 1) == fourcc)
174 {
175 UINT ctab_size = (comment_size - 1) * sizeof(DWORD);
176 const void *ctab_data = ptr + 2;
177 if (size)
178 *size = ctab_size;
179 if (data)
180 *data = ctab_data;
181 TRACE("Returning comment data at %p with size %d\n", ctab_data, ctab_size);
182 return D3D_OK;
183 }
184 ptr += comment_size;
185 }
186 }
187
188 return S_FALSE;
189}
190
192{
193 /* FIXME: This assumes that d3dcompiler.h and dlls/d3dcompiler_XX/Makefile.in stay
194 * in sync regarding which library creates the unnumbered d3dcompiler.lib implib.
195 * GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, D3DCompile) would
196 * be nice, but "D3DCompile" will point to the IAT stub, not d3dcompiler_xy.dll */
198 void **assemble = param;
199
200 if (!mod)
201 ERR("%s not found - which d3dcompiler are we linked against?\n", D3DCOMPILER_DLL_A);
202
203 *assemble = (void *)GetProcAddress(mod, "D3DAssemble");
204 return TRUE;
205}
206
209{
210 static HRESULT (WINAPI *pD3DAssemble)(const void *data, SIZE_T datasize, const char *filename,
214 HRESULT hr;
215
216 TRACE("data %p, data_len %u, defines %p, include %p, flags %#lx, shader %p, error_messages %p.\n",
218
220
221 /* Forward to d3dcompiler: the parameter types aren't really different,
222 the actual data types are equivalent */
223 hr = pD3DAssemble(data, data_len, NULL, (D3D_SHADER_MACRO *)defines,
226
228 return hr;
229}
230
231static const void *main_file_data;
232
234{
235 0, 0, &from_file_mutex,
236 {
239 },
240 0, 0, {(DWORD_PTR)(__FILE__ ": from_file_mutex")}
241};
243
244/* D3DXInclude private implementation, used to implement
245 * D3DXAssembleShaderFromFile() from D3DXAssembleShader(). */
246/* To be able to correctly resolve include search paths we have to store the
247 * pathname of each include file. We store the pathname pointer right before
248 * the file data. */
249static HRESULT WINAPI d3dx_include_from_file_open(ID3DXInclude *iface, D3DXINCLUDE_TYPE include_type,
250 const char *filename, const void *parent_data, const void **data, UINT *bytes)
251{
252 const char *p, *parent_name = "";
253 char *pathname = NULL, *ptr;
254 char **buffer = NULL;
255 HANDLE file;
256 UINT size;
257
258 if (parent_data)
259 {
260 parent_name = *((const char **)parent_data - 1);
261 }
262 else
263 {
264 if (main_file_data)
265 parent_name = *((const char **)main_file_data - 1);
266 }
267
268 TRACE("Looking up include file %s, parent %s.\n", debugstr_a(filename), debugstr_a(parent_name));
269
270 if ((p = strrchr(parent_name, '\\')))
271 ++p;
272 else
273 p = parent_name;
274 pathname = malloc((p - parent_name) + strlen(filename) + 1);
275 if(!pathname)
277
278 memcpy(pathname, parent_name, p - parent_name);
279 strcpy(pathname + (p - parent_name), filename);
280 ptr = pathname + (p - parent_name);
281 while (*ptr)
282 {
283 if (*ptr == '/')
284 *ptr = '\\';
285 ++ptr;
286 }
287
290 goto error;
291
292 TRACE("Include file found at pathname = %s\n", debugstr_a(pathname));
293
296 goto error;
297
298 buffer = malloc(size + sizeof(char *));
299 if(!buffer)
300 goto error;
301 *buffer = pathname;
302 if (!ReadFile(file, buffer + 1, size, (DWORD *)bytes, NULL))
303 goto error;
304
305 *data = buffer + 1;
306 if (!main_file_data)
308
310 return S_OK;
311
312error:
314 free(pathname);
315 free(buffer);
317}
318
319static HRESULT WINAPI d3dx_include_from_file_close(ID3DXInclude *iface, const void *data)
320{
321 free(*((char **)data - 1));
322 free((char **)data - 1);
323 if (main_file_data == data)
325 return S_OK;
326}
327
328const struct ID3DXIncludeVtbl d3dx_include_from_file_vtbl =
329{
332};
333
336{
337 WCHAR *filename_w;
338 DWORD len;
339 HRESULT ret;
340
341 TRACE("filename %s, defines %p, include %p, flags %#lx, shader %p, error_messages %p.\n",
343
344 if (!filename) return D3DXERR_INVALIDDATA;
345
347 filename_w = malloc(len * sizeof(WCHAR));
348 if (!filename_w) return E_OUTOFMEMORY;
349 MultiByteToWideChar(CP_ACP, 0, filename, -1, filename_w, len);
350
352
353 free(filename_w);
354 return ret;
355}
356
359{
360 struct d3dx_include_from_file include_from_file;
361 const void *buffer;
362 unsigned int len;
363 char *filename_a;
364 HRESULT hr;
365
366 TRACE("filename %s, defines %p, include %p, flags %#lx, shader %p, error_messages %p.\n",
368
369 if(!include)
370 {
371 include_from_file.ID3DXInclude_iface.lpVtbl = &d3dx_include_from_file_vtbl;
372 include = &include_from_file.ID3DXInclude_iface;
373 }
374
376 filename_a = malloc(len * sizeof(char));
377 if (!filename_a)
378 return E_OUTOFMEMORY;
379 WideCharToMultiByte(CP_ACP, 0, filename, -1, filename_a, len, NULL, NULL);
380
383 if (FAILED(hr))
384 {
386 free(filename_a);
387 return D3DXERR_INVALIDDATA;
388 }
389
391
394 free(filename_a);
395 return hr;
396}
397
400{
401 void *buffer;
402 HRSRC res;
403 DWORD len;
404
405 TRACE("module %p, resource %s, defines %p, include %p, flags %#lx, shader %p, error_messages %p.\n",
407
408 if (!(res = FindResourceA(module, resource, (const char *)RT_RCDATA)))
409 return D3DXERR_INVALIDDATA;
411 return D3DXERR_INVALIDDATA;
414}
415
418{
419 void *buffer;
420 HRSRC res;
421 DWORD len;
422
423 TRACE("module %p, resource %s, defines %p, include %p, flags %#lx, shader %p, error_messages %p.\n",
425
426 if (!(res = FindResourceW(module, resource, (const WCHAR *)RT_RCDATA)))
427 return D3DXERR_INVALIDDATA;
429 return D3DXERR_INVALIDDATA;
432}
433
435 ID3DXInclude *include, const char *function, const char *profile, DWORD flags,
436 ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table)
437{
438 HRESULT hr;
439
440 TRACE("data %s, length %u, defines %p, include %p, function %s, profile %s, "
441 "flags %#lx, shader %p, error_msgs %p, constant_table %p.\n",
443 flags, shader, error_msgs, constant_table);
444
445 if (D3DX_SDK_VERSION <= 36)
447
449 function, profile, flags, 0, (ID3DBlob **)shader, (ID3DBlob **)error_msgs);
450
452 {
454 if (FAILED(hr))
455 {
457 *shader = NULL;
458 }
459 }
460
461 return hr;
462}
463
465 ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
467{
468 WCHAR *filename_w;
469 DWORD len;
470 HRESULT ret;
471
472 TRACE("filename %s, defines %p, include %p, entrypoint %s, profile %s, "
473 "flags %#lx, shader %p, error_messages %p, constant_table %p.\n",
476
477 if (!filename) return D3DXERR_INVALIDDATA;
478
480 filename_w = malloc(len * sizeof(WCHAR));
481 if (!filename_w) return E_OUTOFMEMORY;
482 MultiByteToWideChar(CP_ACP, 0, filename, -1, filename_w, len);
483
485 entrypoint, profile, flags,
487
488 free(filename_w);
489 return ret;
490}
491
493 ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
495{
496 struct d3dx_include_from_file include_from_file;
497 unsigned int filename_len;
498 const void *buffer;
499 char *filename_a;
500 HRESULT hr;
501 UINT len;
502
503 TRACE("filename %s, defines %p, include %p, entrypoint %s, profile %s, "
504 "flags %#lx, shader %p, error_messages %p, constant_table %p.\n",
507
508 if (!include)
509 {
510 include_from_file.ID3DXInclude_iface.lpVtbl = &d3dx_include_from_file_vtbl;
511 include = &include_from_file.ID3DXInclude_iface;
512 }
513
514 filename_len = WideCharToMultiByte(CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL);
515 filename_a = malloc(filename_len * sizeof(char));
516 if (!filename_a)
517 return E_OUTOFMEMORY;
518 WideCharToMultiByte(CP_ACP, 0, filename, -1, filename_a, filename_len, NULL, NULL);
519
522 if (FAILED(hr))
523 {
525 free(filename_a);
526 return D3DXERR_INVALIDDATA;
527 }
528
529 if (D3DX_SDK_VERSION <= 36)
531
532 hr = D3DCompile(buffer, len, filename_a, (const D3D_SHADER_MACRO *)defines,
533 (ID3DInclude *)include, entrypoint, profile, flags, 0,
535
539
542 free(filename_a);
543 return hr;
544}
545
547 ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
549{
550 void *buffer;
551 HRSRC res;
552 DWORD len;
553
554 TRACE("module %p, resource %s, defines %p, include %p, entrypoint %s, profile %s, "
555 "flags %#lx, shader %p, error_messages %p, constant_table %p.\n",
558
559 if (!(res = FindResourceA(module, resource, (const char *)RT_RCDATA)))
560 return D3DXERR_INVALIDDATA;
562 return D3DXERR_INVALIDDATA;
563 return D3DXCompileShader(buffer, len, defines, include, entrypoint, profile,
565}
566
568 ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
570{
571 void *buffer;
572 HRSRC res;
573 DWORD len;
574
575 TRACE("module %p, resource %s, defines %p, include %p, entrypoint %s, profile %s, "
576 "flags %#lx, shader %p, error_messages %p, constant_table %p.\n",
579
580 if (!(res = FindResourceW(module, resource, (const WCHAR *)RT_RCDATA)))
581 return D3DXERR_INVALIDDATA;
583 return D3DXERR_INVALIDDATA;
584 return D3DXCompileShader(buffer, len, defines, include, entrypoint, profile,
586}
587
590{
591 TRACE("data %s, data_len %u, defines %p, include %p, shader %p, error_messages %p.\n",
593
594 return D3DPreprocess(data, data_len, NULL,
597}
598
601{
602 WCHAR *filename_w = NULL;
603 DWORD len;
604 HRESULT ret;
605
606 TRACE("filename %s, defines %p, include %p, shader %p, error_messages %p.\n",
608
609 if (!filename) return D3DXERR_INVALIDDATA;
610
612 filename_w = malloc(len * sizeof(WCHAR));
613 if (!filename_w) return E_OUTOFMEMORY;
614 MultiByteToWideChar(CP_ACP, 0, filename, -1, filename_w, len);
615
617
618 free(filename_w);
619 return ret;
620}
621
624{
625 struct d3dx_include_from_file include_from_file;
626 const void *buffer;
627 char *filename_a;
628 HRESULT hr;
629 UINT len;
630
631 TRACE("filename %s, defines %p, include %p, shader %p, error_messages %p.\n",
633
634 if (!include)
635 {
636 include_from_file.ID3DXInclude_iface.lpVtbl = &d3dx_include_from_file_vtbl;
637 include = &include_from_file.ID3DXInclude_iface;
638 }
639
641 filename_a = malloc(len * sizeof(char));
642 if (!filename_a)
643 return E_OUTOFMEMORY;
644 WideCharToMultiByte(CP_ACP, 0, filename, -1, filename_a, len, NULL, NULL);
645
648 if (FAILED(hr))
649 {
651 free(filename_a);
652 return D3DXERR_INVALIDDATA;
653 }
654
656 (const D3D_SHADER_MACRO *)defines,
659
662 free(filename_a);
663 return hr;
664}
665
668{
669 void *buffer;
670 HRSRC res;
671 DWORD len;
672
673 TRACE("module %p, resource %s, defines %p, include %p, shader %p, error_messages %p.\n",
675
676 if (!(res = FindResourceA(module, resource, (const char *)RT_RCDATA)))
677 return D3DXERR_INVALIDDATA;
679 return D3DXERR_INVALIDDATA;
682}
683
686{
687 void *buffer;
688 HRSRC res;
689 DWORD len;
690
691 TRACE("module %p, resource %s, defines %p, include %p, shader %p, error_messages %p.\n",
693
694 if (!(res = FindResourceW(module, resource, (const WCHAR *)RT_RCDATA)))
695 return D3DXERR_INVALIDDATA;
697 return D3DXERR_INVALIDDATA;
700
701}
702
704{
705 ID3DXConstantTable ID3DXConstantTable_iface;
707 char *ctab;
712};
713
715{
716 if (constant->constants)
717 {
718 UINT i, count = constant->desc.Elements > 1 ? constant->desc.Elements : constant->desc.StructMembers;
719
720 for (i = 0; i < count; ++i)
721 {
722 free_constant(&constant->constants[i]);
723 }
724 free(constant->constants);
725 }
726}
727
729{
730 if (table->constants)
731 {
732 UINT i;
733
734 for (i = 0; i < table->desc.Constants; ++i)
735 {
736 free_constant(&table->constants[i]);
737 }
738 free(table->constants);
739 }
740 free(table->ctab);
741}
742
743static inline struct ID3DXConstantTableImpl *impl_from_ID3DXConstantTable(ID3DXConstantTable *iface)
744{
746}
747
749{
750 return (version & 0xffff0000) == 0xfffe0000;
751}
752
754{
755 return (D3DXHANDLE)constant;
756}
757
759 struct ctab_constant *constant, const char *name);
760
762{
763 const char *part;
765
766 TRACE("constant %p, name %s\n", constant, debugstr_a(name));
767
768 if (!name || !*name) return NULL;
769
770 element = atoi(name);
771 part = strchr(name, ']') + 1;
772
773 if (constant->desc.Elements > element)
774 {
775 struct ctab_constant *c = constant->constants ? &constant->constants[element] : constant;
776
777 switch (*part++)
778 {
779 case '.':
780 return get_constant_by_name(NULL, c, part);
781
782 case '[':
783 return get_constant_element_by_name(c, part);
784
785 case '\0':
786 TRACE("Returning parameter %p\n", c);
787 return c;
788
789 default:
790 FIXME("Unhandled case \"%c\"\n", *--part);
791 break;
792 }
793 }
794
795 TRACE("Constant not found\n");
796 return NULL;
797}
798
800 struct ctab_constant *constant, const char *name)
801{
802 UINT i, count, length;
803 struct ctab_constant *handles;
804 const char *part;
805
806 TRACE("table %p, constant %p, name %s\n", table, constant, debugstr_a(name));
807
808 if (!name || !*name) return NULL;
809
810 if (!constant)
811 {
812 count = table->desc.Constants;
813 handles = table->constants;
814 }
815 else
816 {
817 count = constant->desc.StructMembers;
818 handles = constant->constants;
819 }
820
821 length = strcspn(name, "[.");
822 part = name + length;
823
824 for (i = 0; i < count; i++)
825 {
827 {
828 switch (*part++)
829 {
830 case '.':
831 return get_constant_by_name(NULL, &handles[i], part);
832
833 case '[':
834 return get_constant_element_by_name(&handles[i], part);
835
836 default:
837 TRACE("Returning parameter %p\n", &handles[i]);
838 return &handles[i];
839 }
840 }
841 }
842
843 TRACE("Constant not found\n");
844 return NULL;
845}
846
848{
849 struct ctab_constant *c;
850 UINT i, count;
851
852 /* all variable have at least elements = 1, but not always elements */
853 if (!parent->constants) return NULL;
854
855 count = parent->desc.Elements > 1 ? parent->desc.Elements : parent->desc.StructMembers;
856 for (i = 0; i < count; ++i)
857 {
858 if (handle_from_constant(&parent->constants[i]) == handle)
859 return &parent->constants[i];
860
861 c = is_valid_sub_constant(&parent->constants[i], handle);
862 if (c) return c;
863 }
864
865 return NULL;
866}
867
869{
870 struct ctab_constant *c;
871 UINT i;
872
873 if (!handle) return NULL;
874
875 for (i = 0; i < table->desc.Constants; ++i)
876 {
877 if (handle_from_constant(&table->constants[i]) == handle)
878 return &table->constants[i];
879
880 c = is_valid_sub_constant(&table->constants[i], handle);
881 if (c) return c;
882 }
883
885 return NULL;
886
888}
889
890/*** IUnknown methods ***/
891static HRESULT WINAPI ID3DXConstantTableImpl_QueryInterface(ID3DXConstantTable *iface, REFIID riid, void **out)
892{
893 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
894
896 IsEqualGUID(riid, &IID_ID3DXBuffer) ||
897 IsEqualGUID(riid, &IID_ID3DXConstantTable))
898 {
900 *out = iface;
901 return S_OK;
902 }
903
904 WARN("Interface %s not found.\n", debugstr_guid(riid));
905
906 return E_NOINTERFACE;
907}
908
909static ULONG WINAPI ID3DXConstantTableImpl_AddRef(ID3DXConstantTable *iface)
910{
912 ULONG refcount = InterlockedIncrement(&table->ref);
913
914 TRACE("%p increasing refcount to %lu.\n", table, refcount);
915
916 return refcount;
917}
918
919static ULONG WINAPI ID3DXConstantTableImpl_Release(ID3DXConstantTable *iface)
920{
922 ULONG refcount = InterlockedDecrement(&table->ref);
923
924 TRACE("%p decreasing refcount to %lu.\n", table, refcount);
925
926 if (!refcount)
927 {
929 free(table);
930 }
931
932 return refcount;
933}
934
935/*** ID3DXBuffer methods ***/
936static void * WINAPI ID3DXConstantTableImpl_GetBufferPointer(ID3DXConstantTable *iface)
937{
939
940 TRACE("iface %p.\n", iface);
941
942 return table->ctab;
943}
944
945static DWORD WINAPI ID3DXConstantTableImpl_GetBufferSize(ID3DXConstantTable *iface)
946{
948
949 TRACE("(%p)->()\n", This);
950
951 return This->size;
952}
953
954/*** ID3DXConstantTable methods ***/
956{
958
959 TRACE("(%p)->(%p)\n", This, desc);
960
961 if (!desc)
962 return D3DERR_INVALIDCALL;
963
964 *desc = This->desc;
965
966 return D3D_OK;
967}
968
969const struct ctab_constant *d3dx_shader_get_ctab_constant(ID3DXConstantTable *iface, D3DXHANDLE constant)
970{
972
974}
975
978{
981
982 TRACE("(%p)->(%p, %p, %p)\n", ctab, constant, desc, count);
983
984 if (!c)
985 {
986 WARN("Invalid argument specified\n");
987 return D3DERR_INVALIDCALL;
988 }
989
990 if (desc) *desc = c->desc;
991 if (count) *count = 1;
992
993 return D3D_OK;
994}
995
997{
1000
1001 TRACE("(%p)->(%p)\n", This, constant);
1002
1003 if (!c || c->desc.RegisterSet != D3DXRS_SAMPLER)
1004 {
1005 WARN("Invalid argument specified\n");
1006 return (UINT)-1;
1007 }
1008
1009 TRACE("Returning RegisterIndex %u\n", c->desc.RegisterIndex);
1010 return c->desc.RegisterIndex;
1011}
1012
1014{
1016 struct ctab_constant *c;
1017
1018 TRACE("(%p)->(%p, %d)\n", This, constant, index);
1019
1020 if (constant)
1021 {
1023 if (c && index < c->desc.StructMembers)
1024 {
1025 c = &c->constants[index];
1026 TRACE("Returning constant %p\n", c);
1027 return handle_from_constant(c);
1028 }
1029 }
1030 else
1031 {
1032 if (index < This->desc.Constants)
1033 {
1034 c = &This->constants[index];
1035 TRACE("Returning constant %p\n", c);
1036 return handle_from_constant(c);
1037 }
1038 }
1039
1040 WARN("Index out of range\n");
1041 return NULL;
1042}
1043
1045 D3DXHANDLE constant, const char *name)
1046{
1049
1050 TRACE("iface %p, constant %p, name %s.\n", iface, constant, debugstr_a(name));
1051
1053 TRACE("Returning constant %p\n", c);
1054
1055 return handle_from_constant(c);
1056}
1057
1059{
1062
1063 TRACE("(%p)->(%p, %d)\n", This, constant, index);
1064
1065 if (c && index < c->desc.Elements)
1066 {
1067 if (c->desc.Elements > 1) c = &c->constants[index];
1068 TRACE("Returning constant %p\n", c);
1069 return handle_from_constant(c);
1070 }
1071
1072 WARN("Invalid argument specified\n");
1073 return NULL;
1074}
1075
1076static inline DWORD get_index(const void **indata, UINT index, BOOL is_pointer)
1077{
1078 if (!indata)
1079 return 0;
1080
1081 if (is_pointer)
1082 return ((DWORD **)indata)[index / 16][index % 16];
1083
1084 return (*((DWORD **)indata))[index];
1085}
1086
1088 const void **indata, D3DXPARAMETER_TYPE intype, UINT *size, UINT incol, D3DXPARAMETER_CLASS inclass, UINT index,
1089 BOOL is_pointer)
1090{
1092 UINT l, i, regcount = 1, regsize = 1, cin = 1, rin = 1, ret, last = 0;
1093 DWORD tmp;
1094
1095 /* size too small to set anything */
1096 if (*size < desc->Rows * desc->Columns)
1097 {
1098 *size = 0;
1099 return 0;
1100 }
1101
1102 /* D3DXPC_STRUCT is somewhat special */
1103 if (desc->Class == D3DXPC_STRUCT)
1104 {
1105 /*
1106 * Struct array sets the last complete input to the first struct element, all other
1107 * elements are not set.
1108 * E.g.: struct {int i;} s1[2];
1109 * SetValue(device, "s1", [1, 2], 8) => s1 = {2, x};
1110 *
1111 * struct {int i; int n} s2[2];
1112 * SetValue(device, "s2", [1, 2, 3, 4, 5], 20) => s1 = {{3, 4}, {x, x}};
1113 */
1114 if (desc->Elements > 1)
1115 {
1116 UINT offset = *size / (desc->Rows * desc->Columns) - 1;
1117
1118 offset = min(desc->Elements - 1, offset);
1119 last = offset * desc->Rows * desc->Columns;
1120
1121 if ((is_pointer || inclass == D3DXPC_MATRIX_ROWS) && desc->RegisterSet != D3DXRS_BOOL)
1122 {
1123 set(table, device, &constant->constants[0], NULL, intype, size, incol, inclass, 0, is_pointer);
1124 }
1125 else
1126 {
1127 last += set(table, device, &constant->constants[0], indata, intype, size, incol, inclass,
1128 index + last, is_pointer);
1129 }
1130 }
1131 else
1132 {
1133 /*
1134 * D3DXRS_BOOL is always set. As there are only 16 bools and there are
1135 * exactly 16 input values, use matrix transpose.
1136 */
1137 if (inclass == D3DXPC_MATRIX_ROWS && desc->RegisterSet == D3DXRS_BOOL)
1138 {
1139 D3DXMATRIX mat, *m, min;
1140
1141 if (is_pointer)
1142 min = *(D3DXMATRIX *)(indata[index / 16]);
1143 else
1144 min = **(D3DXMATRIX **)indata;
1145
1147 m = &mat;
1148 for (i = 0; i < desc->StructMembers; ++i)
1149 {
1150 last += set(table, device, &constant->constants[i], (const void **)&m, intype, size, incol,
1151 D3DXPC_SCALAR, index + last, is_pointer);
1152 }
1153 }
1154 /*
1155 * For pointers or for matrix rows, only the first member is set.
1156 * All other members are set to 0. This is not true for D3DXRS_BOOL.
1157 * E.g.: struct {int i; int n} s;
1158 * SetValue(device, "s", [1, 2], 8) => s = {1, 0};
1159 */
1160 else if ((is_pointer || inclass == D3DXPC_MATRIX_ROWS) && desc->RegisterSet != D3DXRS_BOOL)
1161 {
1162 last = set(table, device, &constant->constants[0], indata, intype, size, incol, inclass,
1163 index + last, is_pointer);
1164
1165 for (i = 1; i < desc->StructMembers; ++i)
1166 {
1167 set(table, device, &constant->constants[i], NULL, intype, size, incol, inclass, 0, is_pointer);
1168 }
1169 }
1170 else
1171 {
1172 for (i = 0; i < desc->StructMembers; ++i)
1173 {
1174 last += set(table, device, &constant->constants[i], indata, intype, size, incol, D3DXPC_SCALAR,
1175 index + last, is_pointer);
1176 }
1177 }
1178 }
1179
1180 return last;
1181 }
1182
1183 /* elements */
1184 if (desc->Elements > 1)
1185 {
1186 for (i = 0; i < desc->Elements && *size > 0; ++i)
1187 {
1188 last += set(table, device, &constant->constants[i], indata, intype, size, incol, inclass,
1189 index + last, is_pointer);
1190
1191 /* adjust the vector size for matrix rows */
1192 if (inclass == D3DXPC_MATRIX_ROWS && desc->Class == D3DXPC_VECTOR && (i % 4) == 3)
1193 {
1194 last += 12;
1195 *size = *size < 12 ? 0 : *size - 12;
1196 }
1197 }
1198
1199 return last;
1200 }
1201
1202 switch (desc->Class)
1203 {
1204 case D3DXPC_SCALAR:
1205 case D3DXPC_VECTOR:
1206 case D3DXPC_MATRIX_ROWS:
1207 regcount = min(desc->RegisterCount, desc->Rows);
1208 if (inclass == D3DXPC_MATRIX_ROWS) cin = incol;
1209 else rin = incol;
1210 regsize = desc->Columns;
1211 break;
1212
1214 regcount = min(desc->RegisterCount, desc->Columns);
1215 if (inclass == D3DXPC_MATRIX_ROWS) rin = incol;
1216 else cin = incol;
1217 regsize = desc->Rows;
1218 break;
1219
1220 default:
1221 FIXME("Unhandled variable class %s\n", debug_d3dxparameter_class(desc->Class));
1222 return 0;
1223 }
1224
1225 /* specific stuff for different in types */
1226 switch (inclass)
1227 {
1228 case D3DXPC_SCALAR:
1229 ret = desc->Columns * desc->Rows;
1230 *size -= desc->Columns * desc->Rows;
1231 break;
1232
1233 case D3DXPC_VECTOR:
1234 switch (desc->Class)
1235 {
1236 case D3DXPC_MATRIX_ROWS:
1237 if (*size < regcount * 4)
1238 {
1239 *size = 0;
1240 return 0;
1241 }
1242 ret = 4 * regcount;
1243 *size -= 4 * regcount;
1244 break;
1245
1247 ret = 4 * regsize;
1248 *size -= 4 * regcount;
1249 break;
1250
1251 case D3DXPC_SCALAR:
1252 ret = 1;
1253 *size -= ret;
1254 break;
1255
1256 case D3DXPC_VECTOR:
1257 ret = 4;
1258 *size -= ret;
1259 break;
1260
1261 default:
1262 FIXME("Unhandled variable class %s\n", debug_d3dxparameter_class(desc->Class));
1263 return 0;
1264 }
1265 break;
1266
1267 case D3DXPC_MATRIX_ROWS:
1268 switch (desc->Class)
1269 {
1270 case D3DXPC_MATRIX_ROWS:
1272 if (*size < 16)
1273 {
1274 *size = 0;
1275 return 0;
1276 }
1277 ret = 16;
1278 break;
1279
1280 case D3DXPC_SCALAR:
1281 ret = 4;
1282 break;
1283
1284 case D3DXPC_VECTOR:
1285 ret = 1;
1286 break;
1287
1288 default:
1289 FIXME("Unhandled variable class %s\n", debug_d3dxparameter_class(desc->Class));
1290 return 0;
1291 }
1292 *size -= ret;
1293 break;
1294
1296 switch (desc->Class)
1297 {
1298 case D3DXPC_MATRIX_ROWS:
1300 if (*size < 16)
1301 {
1302 *size = 0;
1303 return 0;
1304 }
1305 ret = 16;
1306 break;
1307
1308 case D3DXPC_SCALAR:
1309 ret = 1;
1310 break;
1311
1312 case D3DXPC_VECTOR:
1313 ret = 4;
1314 break;
1315
1316 default:
1317 FIXME("Unhandled variable class %s\n", debug_d3dxparameter_class(desc->Class));
1318 return 0;
1319 }
1320 *size -= ret;
1321 break;
1322
1323 default:
1324 FIXME("Unhandled variable class %s\n", debug_d3dxparameter_class(inclass));
1325 return 0;
1326 }
1327
1328 /* set the registers */
1329 switch (desc->RegisterSet)
1330 {
1331 case D3DXRS_BOOL:
1332 regcount = min(desc->RegisterCount, desc->Columns * desc->Rows);
1333 l = 0;
1334 for (i = 0; i < regcount; ++i)
1335 {
1336 BOOL out;
1337 DWORD t = get_index(indata, index + i / regsize * rin + l * cin, is_pointer);
1338
1339 set_number(&tmp, desc->Type, &t, intype);
1340 set_number(&out, D3DXPT_BOOL, &tmp, desc->Type);
1341 if (is_vertex_shader(table->desc.Version))
1343 else
1345
1346 if (++l >= regsize) l = 0;
1347 }
1348 return ret;
1349
1350 case D3DXRS_INT4:
1351 for (i = 0; i < regcount; ++i)
1352 {
1353 INT vec[4] = {0, 0, 1, 0};
1354
1355 for (l = 0; l < regsize; ++l)
1356 {
1357 DWORD t = get_index(indata, index + i * rin + l * cin, is_pointer);
1358
1359 set_number(&tmp, desc->Type, &t, intype);
1360 set_number(&vec[l], D3DXPT_INT, &tmp, desc->Type);
1361 }
1362 if (is_vertex_shader(table->desc.Version))
1364 else
1366 }
1367 return ret;
1368
1369 case D3DXRS_FLOAT4:
1370 for (i = 0; i < regcount; ++i)
1371 {
1372 FLOAT vec[4] = {0};
1373
1374 for (l = 0; l < regsize; ++l)
1375 {
1376 DWORD t = get_index(indata, index + i * rin + l * cin, is_pointer);
1377
1378 set_number(&tmp, desc->Type, &t, intype);
1379 set_number(&vec[l], D3DXPT_FLOAT, &tmp, desc->Type);
1380 }
1381 if (is_vertex_shader(table->desc.Version))
1383 else
1385 }
1386 return ret;
1387
1388 default:
1389 FIXME("Unhandled register set %s\n", debug_d3dxparameter_registerset(desc->RegisterSet));
1390 return 0;
1391 }
1392}
1393
1395 const void *indata, D3DXPARAMETER_TYPE intype)
1396{
1398 UINT count = 1;
1399
1400 if (!c)
1401 {
1402 WARN("Invalid argument specified\n");
1403 return D3DERR_INVALIDCALL;
1404 }
1405
1406 switch (c->desc.Class)
1407 {
1408 case D3DXPC_SCALAR:
1409 set(table, device, c, &indata, intype, &count, c->desc.Columns, D3DXPC_SCALAR, 0, FALSE);
1410 return D3D_OK;
1411
1412 case D3DXPC_VECTOR:
1413 case D3DXPC_MATRIX_ROWS:
1415 case D3DXPC_STRUCT:
1416 return D3D_OK;
1417
1418 default:
1419 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1420 return D3DERR_INVALIDCALL;
1421 }
1422}
1423
1425 const void *indata, UINT count, D3DXPARAMETER_TYPE intype)
1426{
1428
1429 if (!c)
1430 {
1431 WARN("Invalid argument specified\n");
1432 return D3DERR_INVALIDCALL;
1433 }
1434
1435 switch (c->desc.Class)
1436 {
1437 case D3DXPC_SCALAR:
1438 case D3DXPC_VECTOR:
1439 case D3DXPC_MATRIX_ROWS:
1441 case D3DXPC_STRUCT:
1442 set(table, device, c, &indata, intype, &count, c->desc.Columns, D3DXPC_SCALAR, 0, FALSE);
1443 return D3D_OK;
1444
1445 default:
1446 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1447 return D3DERR_INVALIDCALL;
1448 }
1449}
1450
1452 const void *indata, D3DXPARAMETER_TYPE intype)
1453{
1455 UINT count = 4;
1456
1457 if (!c)
1458 {
1459 WARN("Invalid argument specified\n");
1460 return D3DERR_INVALIDCALL;
1461 }
1462
1463 switch (c->desc.Class)
1464 {
1465 case D3DXPC_SCALAR:
1466 case D3DXPC_VECTOR:
1467 case D3DXPC_STRUCT:
1468 set(table, device, c, &indata, intype, &count, 4, D3DXPC_VECTOR, 0, FALSE);
1469 return D3D_OK;
1470
1471 case D3DXPC_MATRIX_ROWS:
1473 return D3D_OK;
1474
1475 default:
1476 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1477 return D3DERR_INVALIDCALL;
1478 }
1479}
1480
1482 const void *indata, UINT count, D3DXPARAMETER_TYPE intype)
1483{
1485
1486 if (!c)
1487 {
1488 WARN("Invalid argument specified\n");
1489 return D3DERR_INVALIDCALL;
1490 }
1491
1492 switch (c->desc.Class)
1493 {
1494 case D3DXPC_SCALAR:
1495 case D3DXPC_VECTOR:
1496 case D3DXPC_MATRIX_ROWS:
1498 case D3DXPC_STRUCT:
1499 count *= 4;
1500 set(table, device, c, &indata, intype, &count, 4, D3DXPC_VECTOR, 0, FALSE);
1501 return D3D_OK;
1502
1503 default:
1504 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1505 return D3DERR_INVALIDCALL;
1506 }
1507}
1508
1510 const void *indata, UINT count, BOOL transpose)
1511{
1513
1514 if (!c)
1515 {
1516 WARN("Invalid argument specified\n");
1517 return D3DERR_INVALIDCALL;
1518 }
1519
1520 switch (c->desc.Class)
1521 {
1522 case D3DXPC_SCALAR:
1523 case D3DXPC_VECTOR:
1524 case D3DXPC_MATRIX_ROWS:
1526 case D3DXPC_STRUCT:
1527 count *= 16;
1528 set(table, device, c, &indata, D3DXPT_FLOAT, &count, 4,
1530 return D3D_OK;
1531
1532 default:
1533 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1534 return D3DERR_INVALIDCALL;
1535 }
1536}
1537
1539 D3DXHANDLE constant, const void **indata, UINT count, BOOL transpose)
1540{
1542
1543 if (!c)
1544 {
1545 WARN("Invalid argument specified\n");
1546 return D3DERR_INVALIDCALL;
1547 }
1548
1549 switch (c->desc.Class)
1550 {
1551 case D3DXPC_SCALAR:
1552 case D3DXPC_VECTOR:
1553 case D3DXPC_MATRIX_ROWS:
1555 case D3DXPC_STRUCT:
1556 count *= 16;
1557 set(table, device, c, indata, D3DXPT_FLOAT, &count, 4,
1559 return D3D_OK;
1560
1561 default:
1562 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(c->desc.Class));
1563 return D3DERR_INVALIDCALL;
1564 }
1565}
1566
1567static HRESULT WINAPI ID3DXConstantTableImpl_SetDefaults(struct ID3DXConstantTable *iface,
1568 struct IDirect3DDevice9 *device)
1569{
1571 UINT i;
1572
1573 TRACE("iface %p, device %p\n", iface, device);
1574
1575 if (!device)
1576 {
1577 WARN("Invalid argument specified\n");
1578 return D3DERR_INVALIDCALL;
1579 }
1580
1581 for (i = 0; i < This->desc.Constants; i++)
1582 {
1583 D3DXCONSTANT_DESC *desc = &This->constants[i].desc;
1584 HRESULT hr;
1585
1586 if (!desc->DefaultValue)
1587 continue;
1588
1589 switch (desc->RegisterSet)
1590 {
1591 case D3DXRS_BOOL:
1592 if (is_vertex_shader(This->desc.Version))
1594 desc->RegisterCount);
1595 else
1597 desc->RegisterCount);
1598 break;
1599
1600 case D3DXRS_INT4:
1601 if (is_vertex_shader(This->desc.Version))
1603 desc->RegisterCount);
1604 else
1606 desc->RegisterCount);
1607 break;
1608
1609 case D3DXRS_FLOAT4:
1610 if (is_vertex_shader(This->desc.Version))
1612 desc->RegisterCount);
1613 else
1615 desc->RegisterCount);
1616 break;
1617
1618 default:
1619 FIXME("Unhandled register set %s\n", debug_d3dxparameter_registerset(desc->RegisterSet));
1620 hr = E_NOTIMPL;
1621 break;
1622 }
1623
1624 if (hr != D3D_OK)
1625 return hr;
1626 }
1627
1628 return D3D_OK;
1629}
1630
1631static HRESULT WINAPI ID3DXConstantTableImpl_SetValue(struct ID3DXConstantTable *iface,
1632 struct IDirect3DDevice9 *device, D3DXHANDLE constant, const void *data, unsigned int bytes)
1633{
1637
1638 TRACE("iface %p, device %p, constant %p, data %p, bytes %u\n", iface, device, constant, data, bytes);
1639
1640 if (!device || !c || !data)
1641 {
1642 WARN("Invalid argument specified\n");
1643 return D3DERR_INVALIDCALL;
1644 }
1645
1646 desc = &c->desc;
1647
1648 switch (desc->Class)
1649 {
1650 case D3DXPC_SCALAR:
1651 case D3DXPC_VECTOR:
1652 case D3DXPC_MATRIX_ROWS:
1654 case D3DXPC_STRUCT:
1655 bytes /= 4;
1656 set(table, device, c, &data, desc->Type, &bytes, desc->Columns, D3DXPC_SCALAR, 0, FALSE);
1657 return D3D_OK;
1658
1659 default:
1660 FIXME("Unhandled parameter class %s\n", debug_d3dxparameter_class(desc->Class));
1661 return D3DERR_INVALIDCALL;
1662 }
1663}
1664
1665static HRESULT WINAPI ID3DXConstantTableImpl_SetBool(struct ID3DXConstantTable *iface,
1667{
1669
1670 TRACE("iface %p, device %p, constant %p, b %d\n", iface, device, constant, b);
1671
1673}
1674
1675static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(struct ID3DXConstantTable *iface,
1677{
1679
1680 TRACE("iface %p, device %p, constant %p, b %p, count %d\n", iface, device, constant, b, count);
1681
1683}
1684
1685static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(struct ID3DXConstantTable *iface,
1687{
1689
1690 TRACE("iface %p, device %p, constant %p, n %d\n", iface, device, constant, n);
1691
1693}
1694
1695static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(struct ID3DXConstantTable *iface,
1697{
1699
1700 TRACE("iface %p, device %p, constant %p, n %p, count %d\n", iface, device, constant, n, count);
1701
1703}
1704
1705static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(struct ID3DXConstantTable *iface,
1707{
1709
1710 TRACE("iface %p, device %p, constant %p, f %f\n", iface, device, constant, f);
1711
1713}
1714
1715static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(struct ID3DXConstantTable *iface,
1716 struct IDirect3DDevice9 *device, D3DXHANDLE constant, const float *f, UINT count)
1717{
1719
1720 TRACE("iface %p, device %p, constant %p, f %p, count %d\n", iface, device, constant, f, count);
1721
1723}
1724
1725static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(struct ID3DXConstantTable *iface,
1727{
1729
1730 TRACE("iface %p, device %p, constant %p, vector %p\n", iface, device, constant, vector);
1731
1733}
1734
1735static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(struct ID3DXConstantTable *iface,
1737{
1739
1740 TRACE("iface %p, device %p, constant %p, vector %p, count %u\n", iface, device, constant, vector, count);
1741
1743}
1744
1745static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrix(struct ID3DXConstantTable *iface,
1747{
1749
1750 TRACE("iface %p, device %p, constant %p, matrix %p\n", iface, device, constant, matrix);
1751
1753}
1754
1755static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixArray(struct ID3DXConstantTable *iface,
1757{
1759
1760 TRACE("iface %p, device %p, constant %p, matrix %p, count %u\n", iface, device, constant, matrix, count);
1761
1763}
1764
1765static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixPointerArray(struct ID3DXConstantTable *iface,
1767{
1769
1770 TRACE("iface %p, device %p, constant %p, matrix %p, count %u)\n", iface, device, constant, matrix, count);
1771
1772 return set_matrix_pointer_array(This, device, constant, (const void **)matrix, count, FALSE);
1773}
1774
1775static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTranspose(struct ID3DXConstantTable *iface,
1777{
1779
1780 TRACE("iface %p, device %p, constant %p, matrix %p\n", iface, device, constant, matrix);
1781
1783}
1784
1785static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposeArray(struct ID3DXConstantTable *iface,
1787{
1789
1790 TRACE("iface %p, device %p, constant %p, matrix %p, count %u\n", iface, device, constant, matrix, count);
1791
1793}
1794
1797{
1799
1800 TRACE("iface %p, device %p, constant %p, matrix %p, count %u)\n", iface, device, constant, matrix, count);
1801
1802 return set_matrix_pointer_array(This, device, constant, (const void **)matrix, count, TRUE);
1803}
1804
1805static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl =
1806{
1807 /*** IUnknown methods ***/
1811 /*** ID3DXBuffer methods ***/
1814 /*** ID3DXConstantTable methods ***/
1837};
1838
1839static HRESULT parse_ctab_constant_type(const char *ctab, DWORD typeoffset, struct ctab_constant *constant,
1840 BOOL is_element, WORD index, WORD max_index, DWORD *offset, DWORD nameoffset, UINT regset)
1841{
1842 const D3DXSHADER_TYPEINFO *type = (LPD3DXSHADER_TYPEINFO)(ctab + typeoffset);
1843 const D3DXSHADER_STRUCTMEMBERINFO *memberinfo = NULL;
1844 HRESULT hr = D3D_OK;
1845 UINT i, count = 0;
1846 WORD size = 0;
1847
1848 constant->desc.DefaultValue = offset ? ctab + *offset : NULL;
1849 constant->desc.Class = type->Class;
1850 constant->desc.Type = type->Type;
1851 constant->desc.Rows = type->Rows;
1852 constant->desc.Columns = type->Columns;
1853 constant->desc.Elements = is_element ? 1 : type->Elements;
1854 constant->desc.StructMembers = type->StructMembers;
1855 constant->desc.Name = ctab + nameoffset;
1856 constant->desc.RegisterSet = regset;
1857 constant->desc.RegisterIndex = index;
1858
1859 TRACE("name %s, elements %u, index %u, defaultvalue %p, regset %s\n", constant->desc.Name,
1860 constant->desc.Elements, index, constant->desc.DefaultValue,
1862 TRACE("class %s, type %s, rows %d, columns %d, elements %d, struct_members %d\n",
1864 type->Rows, type->Columns, type->Elements, type->StructMembers);
1865
1866 if (type->Elements > 1 && !is_element)
1867 {
1868 count = type->Elements;
1869 }
1870 else if ((type->Class == D3DXPC_STRUCT) && type->StructMembers)
1871 {
1872 memberinfo = (D3DXSHADER_STRUCTMEMBERINFO*)(ctab + type->StructMemberInfo);
1873 count = type->StructMembers;
1874 }
1875
1876 if (count)
1877 {
1878 constant->constants = calloc(count, sizeof(*constant->constants));
1879 if (!constant->constants)
1880 {
1881 ERR("Out of memory\n");
1882 hr = E_OUTOFMEMORY;
1883 goto error;
1884 }
1885
1886 for (i = 0; i < count; ++i)
1887 {
1888 hr = parse_ctab_constant_type(ctab, memberinfo ? memberinfo[i].TypeInfo : typeoffset,
1889 &constant->constants[i], memberinfo == NULL, index + size, max_index, offset,
1890 memberinfo ? memberinfo[i].Name : nameoffset, regset);
1891 if (hr != D3D_OK)
1892 goto error;
1893
1894 size += constant->constants[i].desc.RegisterCount;
1895 }
1896 }
1897 else
1898 {
1899 WORD offsetdiff = type->Columns * type->Rows;
1900 BOOL fail = FALSE;
1901
1902 size = type->Columns * type->Rows;
1903
1904 switch (regset)
1905 {
1906 case D3DXRS_BOOL:
1907 fail = type->Class != D3DXPC_SCALAR && type->Class != D3DXPC_VECTOR
1908 && type->Class != D3DXPC_MATRIX_ROWS && type->Class != D3DXPC_MATRIX_COLUMNS;
1909 break;
1910
1911 case D3DXRS_FLOAT4:
1912 case D3DXRS_INT4:
1913 switch (type->Class)
1914 {
1915 case D3DXPC_VECTOR:
1916 size = 1;
1917 /* fall through */
1918 case D3DXPC_SCALAR:
1919 offsetdiff = type->Rows * 4;
1920 break;
1921
1922 case D3DXPC_MATRIX_ROWS:
1923 offsetdiff = type->Rows * 4;
1924 size = type->Rows;
1925 break;
1926
1928 offsetdiff = type->Columns * 4;
1929 size = type->Columns;
1930 break;
1931
1932 default:
1933 fail = TRUE;
1934 break;
1935 }
1936 break;
1937
1938 case D3DXRS_SAMPLER:
1939 size = 1;
1940 fail = type->Class != D3DXPC_OBJECT;
1941 break;
1942
1943 default:
1944 fail = TRUE;
1945 break;
1946 }
1947
1948 if (fail)
1949 {
1950 FIXME("Unhandled register set %s, type class %s\n", debug_d3dxparameter_registerset(regset),
1952 }
1953
1954 /* offset in bytes => offsetdiff * sizeof(DWORD) */
1955 if (offset) *offset += offsetdiff * 4;
1956 }
1957
1958 constant->desc.RegisterCount = max(0, min(max_index - index, size));
1959 constant->desc.Bytes = 4 * constant->desc.Elements * type->Rows * type->Columns;
1960
1961 return D3D_OK;
1962
1963error:
1964 if (constant->constants)
1965 {
1966 for (i = 0; i < count; ++i)
1967 {
1968 free_constant(&constant->constants[i]);
1969 }
1970 free(constant->constants);
1971 constant->constants = NULL;
1972 }
1973
1974 return hr;
1975}
1976
1978{
1979 struct ID3DXConstantTableImpl *object = NULL;
1980 const void *data;
1981 HRESULT hr;
1982 UINT size;
1983 const D3DXSHADER_CONSTANTTABLE *ctab_header;
1984 const D3DXSHADER_CONSTANTINFO *constant_info;
1985 DWORD i;
1986
1987 TRACE("byte_code %p, flags %#lx, constant_table %p.\n", byte_code, flags, constant_table);
1988
1989 if (constant_table)
1991
1992 if (!byte_code || !constant_table)
1993 {
1994 WARN("Invalid argument specified.\n");
1995 return D3DERR_INVALIDCALL;
1996 }
1997
1998 if (!is_valid_bytecode(*byte_code))
1999 {
2000 WARN("Invalid byte_code specified.\n");
2001 return D3D_OK;
2002 }
2003
2005 FIXME("Flags %#lx not handled.\n", flags);
2006
2007 hr = D3DXFindShaderComment(byte_code, MAKEFOURCC('C','T','A','B'), &data, &size);
2008 if (hr != D3D_OK)
2009 {
2010 WARN("CTAB not found.\n");
2011 return D3DXERR_INVALIDDATA;
2012 }
2013
2014 if (size < sizeof(*ctab_header))
2015 {
2016 WARN("Invalid CTAB size.\n");
2017 return D3DXERR_INVALIDDATA;
2018 }
2019
2020 ctab_header = (const D3DXSHADER_CONSTANTTABLE *)data;
2021 if (ctab_header->Size != sizeof(*ctab_header))
2022 {
2023 WARN("Invalid D3DXSHADER_CONSTANTTABLE size.\n");
2024 return D3DXERR_INVALIDDATA;
2025 }
2026
2027 object = calloc(1, sizeof(*object));
2028 if (!object)
2029 return E_OUTOFMEMORY;
2030
2031 object->ID3DXConstantTable_iface.lpVtbl = &ID3DXConstantTable_Vtbl;
2032 object->ref = 1;
2033
2034 object->ctab = malloc(size);
2035 if (!object->ctab)
2036 {
2037 ERR("Out of memory\n");
2038 free(object);
2039 return E_OUTOFMEMORY;
2040 }
2041 object->size = size;
2042 memcpy(object->ctab, data, object->size);
2043
2044 object->flags = flags;
2045 object->desc.Creator = ctab_header->Creator ? object->ctab + ctab_header->Creator : NULL;
2046 object->desc.Version = ctab_header->Version;
2047 object->desc.Constants = ctab_header->Constants;
2048 TRACE("Creator %s, Version %#lx, Constants %u, Target %s.\n",
2049 debugstr_a(object->desc.Creator), object->desc.Version, object->desc.Constants,
2050 debugstr_a(ctab_header->Target ? object->ctab + ctab_header->Target : NULL));
2051
2052 object->constants = calloc(object->desc.Constants, sizeof(*object->constants));
2053 if (!object->constants)
2054 {
2055 ERR("Out of memory\n");
2056 hr = E_OUTOFMEMORY;
2057 goto error;
2058 }
2059
2060 constant_info = (const D3DXSHADER_CONSTANTINFO *)(object->ctab + ctab_header->ConstantInfo);
2061 for (i = 0; i < ctab_header->Constants; i++)
2062 {
2063 DWORD offset = constant_info[i].DefaultValue;
2064
2065 hr = parse_ctab_constant_type(object->ctab, constant_info[i].TypeInfo,
2066 &object->constants[i], FALSE, constant_info[i].RegisterIndex,
2067 constant_info[i].RegisterIndex + constant_info[i].RegisterCount,
2068 offset ? &offset : NULL, constant_info[i].Name, constant_info[i].RegisterSet);
2069 if (hr != D3D_OK)
2070 goto error;
2071
2072 /*
2073 * Set the register count, it may differ for D3DXRS_INT4, because somehow
2074 * it makes the assumption that the register size is 1 instead of 4, so the
2075 * count is 4 times bigger. This holds true only for toplevel shader
2076 * constants. The count of elements and members is always based on a
2077 * register size of 4.
2078 */
2079 if (object->constants[i].desc.RegisterSet == D3DXRS_INT4)
2080 {
2081 object->constants[i].desc.RegisterCount = constant_info[i].RegisterCount;
2082 }
2083 object->constants[i].constantinfo_reserved = constant_info[i].Reserved;
2084 }
2085
2086 *constant_table = &object->ID3DXConstantTable_iface;
2087
2088 return D3D_OK;
2089
2090error:
2091 free_constant_table(object);
2092 free(object);
2093
2094 return hr;
2095}
2096
2097HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table)
2098{
2099 TRACE("(%p, %p): Forwarded to D3DXGetShaderConstantTableEx\n", byte_code, constant_table);
2100
2101 return D3DXGetShaderConstantTableEx(byte_code, 0, constant_table);
2102}
2103
2105{
2106 ID3DXFragmentLinker ID3DXFragmentLinker_iface;
2108
2111};
2112
2113static inline struct d3dx9_fragment_linker *impl_from_ID3DXFragmentLinker(ID3DXFragmentLinker *iface)
2114{
2116}
2117
2118static HRESULT WINAPI d3dx9_fragment_linker_QueryInterface(ID3DXFragmentLinker *iface, REFIID riid, void **out)
2119{
2120 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
2121
2123 || IsEqualGUID(riid, &IID_ID3DXFragmentLinker))
2124 {
2125 iface->lpVtbl->AddRef(iface);
2126 *out = iface;
2127 return D3D_OK;
2128 }
2129
2130 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
2131 *out = NULL;
2132 return E_NOINTERFACE;
2133}
2134
2135static ULONG WINAPI d3dx9_fragment_linker_AddRef(ID3DXFragmentLinker *iface)
2136{
2138 ULONG refcount = InterlockedIncrement(&linker->ref);
2139
2140 TRACE("%p increasing refcount to %lu.\n", linker, refcount);
2141
2142 return refcount;
2143}
2144
2145static ULONG WINAPI d3dx9_fragment_linker_Release(ID3DXFragmentLinker *iface)
2146{
2148 ULONG refcount = InterlockedDecrement(&linker->ref);
2149
2150 TRACE("%p decreasing refcount to %lu.\n", linker, refcount);
2151
2152 if (!refcount)
2153 {
2155 free(linker);
2156 }
2157
2158 return refcount;
2159}
2160
2161static HRESULT WINAPI d3dx9_fragment_linker_GetDevice(ID3DXFragmentLinker *iface, struct IDirect3DDevice9 **device)
2162{
2164
2165 TRACE("iface %p, device %p.\n", linker, device);
2166
2167 if (!device)
2168 {
2169 WARN("Invalid argument supplied.\n");
2170 return D3DERR_INVALIDCALL;
2171 }
2172
2174 *device = linker->device;
2175 TRACE("Returning device %p.\n", *device);
2176
2177 return S_OK;
2178}
2179
2181{
2182 FIXME("iface %p: stub.\n", iface);
2183
2184 return E_NOTIMPL;
2185}
2186
2188{
2189 FIXME("iface %p, index %u: stub.\n", iface, index);
2190
2191 return NULL;
2192}
2193
2195 const char *name)
2196{
2197 FIXME("iface %p, name %s: stub.\n", iface, debugstr_a(name));
2198
2199 return NULL;
2200}
2201
2204{
2205 FIXME("iface %p, name %p, desc %p: stub.\n", iface, name, desc);
2206
2207 return E_NOTIMPL;
2208}
2209
2210static HRESULT WINAPI d3dx9_fragment_linker_AddFragments(ID3DXFragmentLinker *iface, const DWORD *fragments)
2211{
2212 FIXME("iface %p, fragments %p: stub.\n", iface, fragments);
2213
2214 return E_NOTIMPL;
2215}
2216
2218{
2219 FIXME("iface %p, buffer %p: stub.\n", iface, buffer);
2220
2221 return E_NOTIMPL;
2222}
2223
2226{
2227 FIXME("iface %p, name %p, buffer %p: stub.\n", iface, name, buffer);
2228
2229 return E_NOTIMPL;
2230}
2231
2232static HRESULT WINAPI d3dx9_fragment_linker_LinkShader(ID3DXFragmentLinker *iface, const char *profile,
2233 DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, ID3DXBuffer **buffer,
2234 ID3DXBuffer **errors)
2235{
2236 FIXME("iface %p, profile %s, flags %#lx, handles %p, fragment_count %u, buffer %p, errors %p: stub.\n",
2237 iface, debugstr_a(profile), flags, handles, fragment_count, buffer, errors);
2238
2239 return E_NOTIMPL;
2240}
2241
2242static HRESULT WINAPI d3dx9_fragment_linker_LinkVertexShader(ID3DXFragmentLinker *iface, const char *profile,
2243 DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, IDirect3DVertexShader9 **shader,
2244 ID3DXBuffer **errors)
2245{
2246 FIXME("iface %p, profile %s, flags %#lx, handles %p, fragment_count %u, shader %p, errors %p: stub.\n",
2247 iface, debugstr_a(profile), flags, handles, fragment_count, shader, errors);
2248
2249 return E_NOTIMPL;
2250}
2251
2252static HRESULT WINAPI d3dx9_fragment_linker_LinkPixelShader(ID3DXFragmentLinker *iface, const char *profile,
2253 DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, IDirect3DPixelShader9 **shader,
2254 ID3DXBuffer **errors)
2255{
2256 FIXME("iface %p, profile %s, flags %#lx, handles %p, fragment_count %u, shader %p, errors %p: stub.\n",
2257 iface, debugstr_a(profile), flags, handles, fragment_count, shader, errors);
2258
2259 return E_NOTIMPL;
2260}
2261
2262static HRESULT WINAPI d3dx9_fragment_linker_ClearCache(ID3DXFragmentLinker *iface)
2263{
2264 FIXME("iface %p: stub.\n", iface);
2265
2266 return E_NOTIMPL;
2267}
2268
2269static const struct ID3DXFragmentLinkerVtbl d3dx9_fragment_linker_vtbl =
2270{
2286};
2287
2289 ID3DXFragmentLinker **linker)
2290{
2292
2293 TRACE("device %p, size %u, flags %#lx, linker %p.\n", device, size, flags, linker);
2294
2295 object = calloc(1, sizeof(*object));
2296 if (!object)
2297 return E_OUTOFMEMORY;
2298
2299 object->ID3DXFragmentLinker_iface.lpVtbl = &d3dx9_fragment_linker_vtbl;
2300 object->ref = 1;
2301
2303 object->device = device;
2304 object->flags = flags;
2305
2306 *linker = &object->ID3DXFragmentLinker_iface;
2307
2308 return S_OK;
2309}
2310
2312{
2313 TRACE("device %p, size %u, linker %p.\n", device, size, linker);
2314
2315 return D3DXCreateFragmentLinkerEx(device, size, 0, linker);
2316}
2317
2319{
2320 UINT i, sampler_count = 0;
2321 UINT size;
2322 const char *data;
2323 const D3DXSHADER_CONSTANTTABLE *ctab_header;
2324 const D3DXSHADER_CONSTANTINFO *constant_info;
2325
2326 TRACE("byte_code %p, samplers %p, count %p\n", byte_code, samplers, count);
2327
2328 if (count) *count = 0;
2329
2330 if (D3DXFindShaderComment(byte_code, MAKEFOURCC('C','T','A','B'), (const void **)&data, &size) != D3D_OK)
2331 return D3D_OK;
2332
2333 if (size < sizeof(*ctab_header)) return D3D_OK;
2334
2335 ctab_header = (const D3DXSHADER_CONSTANTTABLE *)data;
2336 if (ctab_header->Size != sizeof(*ctab_header)) return D3D_OK;
2337
2338 constant_info = (const D3DXSHADER_CONSTANTINFO *)(data + ctab_header->ConstantInfo);
2339 for (i = 0; i < ctab_header->Constants; i++)
2340 {
2342
2343 TRACE("name = %s\n", data + constant_info[i].Name);
2344
2345 type = (const D3DXSHADER_TYPEINFO *)(data + constant_info[i].TypeInfo);
2346
2347 if (type->Type == D3DXPT_SAMPLER
2348 || type->Type == D3DXPT_SAMPLER1D
2349 || type->Type == D3DXPT_SAMPLER2D
2350 || type->Type == D3DXPT_SAMPLER3D
2351 || type->Type == D3DXPT_SAMPLERCUBE)
2352 {
2353 if (samplers) samplers[sampler_count] = data + constant_info[i].Name;
2354
2355 ++sampler_count;
2356 }
2357 }
2358
2359 TRACE("Found %u samplers\n", sampler_count);
2360
2361 if (count) *count = sampler_count;
2362
2363 return D3D_OK;
2364}
2365
2368{
2369 TRACE("shader %p, colorcode %d, comments %s, buffer %p.\n", shader, colorcode, debugstr_a(comments), buffer);
2370
2372 comments, (ID3DBlob **)buffer);
2373}
2374
2376{
2377 ID3DXTextureShader ID3DXTextureShader_iface;
2379
2384};
2385
2386static inline struct d3dx9_texture_shader *impl_from_ID3DXTextureShader(ID3DXTextureShader *iface)
2387{
2389}
2390
2391static HRESULT WINAPI d3dx9_texture_shader_QueryInterface(ID3DXTextureShader *iface, REFIID riid, void **out)
2392{
2393 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
2394
2395 if (IsEqualGUID(riid, &IID_IUnknown) ||
2396 IsEqualGUID(riid, &IID_ID3DXTextureShader))
2397 {
2398 iface->lpVtbl->AddRef(iface);
2399 *out = iface;
2400 return D3D_OK;
2401 }
2402
2403 WARN("Interface %s not found.\n", debugstr_guid(riid));
2404 *out = NULL;
2405 return E_NOINTERFACE;
2406}
2407
2408static ULONG WINAPI d3dx9_texture_shader_AddRef(ID3DXTextureShader *iface)
2409{
2410 struct d3dx9_texture_shader *texture_shader = impl_from_ID3DXTextureShader(iface);
2411 ULONG refcount = InterlockedIncrement(&texture_shader->ref);
2412
2413 TRACE("%p increasing refcount to %lu.\n", texture_shader, refcount);
2414
2415 return refcount;
2416}
2417
2418static ULONG WINAPI d3dx9_texture_shader_Release(ID3DXTextureShader *iface)
2419{
2420 struct d3dx9_texture_shader *texture_shader = impl_from_ID3DXTextureShader(iface);
2421 ULONG refcount = InterlockedDecrement(&texture_shader->ref);
2422
2423 TRACE("%p decreasing refcount to %lu.\n", texture_shader, refcount);
2424
2425 if (!refcount)
2426 {
2427 if (texture_shader->byte_code)
2428 ID3DXBuffer_Release(texture_shader->byte_code);
2429 d3dx_free_param_eval(texture_shader->eval);
2430 d3dx_parameters_store_cleanup(&texture_shader->parameters);
2431 free(texture_shader);
2432 }
2433
2434 return refcount;
2435}
2436
2437static HRESULT WINAPI d3dx9_texture_shader_GetFunction(ID3DXTextureShader *iface, struct ID3DXBuffer **function)
2438{
2439 struct d3dx9_texture_shader *texture_shader = impl_from_ID3DXTextureShader(iface);
2440
2441 TRACE("iface %p, function %p.\n", iface, function);
2442
2443 *function = texture_shader->byte_code;
2444 ID3DXBuffer_AddRef(*function);
2445
2446 return S_OK;
2447}
2448
2449static HRESULT WINAPI d3dx9_texture_shader_GetConstantBuffer(ID3DXTextureShader *iface, struct ID3DXBuffer **constant_buffer)
2450{
2451 FIXME("iface %p, constant_buffer %p stub.\n", iface, constant_buffer);
2452
2453 return E_NOTIMPL;
2454}
2455
2457{
2458 FIXME("iface %p, desc %p stub.\n", iface, desc);
2459
2460 return E_NOTIMPL;
2461}
2462
2464{
2465 FIXME("iface %p, constant %p, constant_desc %p, count %p stub.\n", iface, constant, constant_desc, count);
2466
2467 return E_NOTIMPL;
2468}
2469
2471{
2472 FIXME("iface %p, constant %p, index %u stub.\n", iface, constant, index);
2473
2474 return NULL;
2475}
2476
2478{
2479 FIXME("iface %p, constant %p, name %s stub.\n", iface, constant, debugstr_a(name));
2480
2481 return NULL;
2482}
2483
2485{
2486 FIXME("iface %p, constant %p, index %u stub.\n", iface, constant, index);
2487
2488 return NULL;
2489}
2490
2491static HRESULT WINAPI d3dx9_texture_shader_SetDefaults(ID3DXTextureShader *iface)
2492{
2493 FIXME("iface %p stub.\n", iface);
2494
2495 return E_NOTIMPL;
2496}
2497
2498static HRESULT WINAPI d3dx9_texture_shader_SetValue(ID3DXTextureShader *iface, D3DXHANDLE constant, const void *data, UINT bytes)
2499{
2500 FIXME("iface %p, constant %p, data %p, bytes %u stub.\n", iface, constant, data, bytes);
2501
2502 return E_NOTIMPL;
2503}
2504
2506{
2507 FIXME("iface %p, constant %p, b %u stub.\n", iface, constant, b);
2508
2509 return E_NOTIMPL;
2510}
2511
2513{
2514 FIXME("iface %p, constant %p, b %p, count %u stub.\n", iface, constant, b, count);
2515
2516 return E_NOTIMPL;
2517}
2518
2520{
2521 FIXME("iface %p, constant %p, n %d stub.\n", iface, constant, n);
2522
2523 return E_NOTIMPL;
2524}
2525
2527{
2528 FIXME("iface %p, constant %p, n %p, count %u stub.\n", iface, constant, n, count);
2529
2530 return E_NOTIMPL;
2531}
2532
2534{
2535 FIXME("iface %p, constant %p, f %f stub.\n", iface, constant, f);
2536
2537 return E_NOTIMPL;
2538}
2539
2541{
2542 FIXME("iface %p, constant %p, f %p, count %u stub.\n", iface, constant, f, count);
2543
2544 return E_NOTIMPL;
2545}
2546
2548{
2549 FIXME("iface %p, constant %p, vector %p stub.\n", iface, constant, vector);
2550
2551 return E_NOTIMPL;
2552}
2553
2555{
2556 FIXME("iface %p, constant %p, vector %p, count %u stub.\n", iface, constant, vector, count);
2557
2558 return E_NOTIMPL;
2559}
2560
2562{
2563 FIXME("iface %p, constant %p, matrix %p stub.\n", iface, constant, matrix);
2564
2565 return E_NOTIMPL;
2566}
2567
2569{
2570 FIXME("iface %p, constant %p, matrix %p, count %u stub.\n", iface, constant, matrix, count);
2571
2572 return E_NOTIMPL;
2573}
2574
2576{
2577 FIXME("iface %p, constant %p, matrix %p, count %u stub.\n", iface, constant, matrix, count);
2578
2579 return E_NOTIMPL;
2580}
2581
2583{
2584 FIXME("iface %p, constant %p, matrix %p stub.\n", iface, constant, matrix);
2585
2586 return E_NOTIMPL;
2587}
2588
2590{
2591 FIXME("iface %p, constant %p, matrix %p, count %u stub.\n", iface, constant, matrix, count);
2592
2593 return E_NOTIMPL;
2594}
2595
2597{
2598 FIXME("iface %p, constant %p, matrix %p, count %u stub.\n", iface, constant, matrix, count);
2599
2600 return E_NOTIMPL;
2601}
2602
2603static const struct ID3DXTextureShaderVtbl d3dx9_texture_shader_vtbl =
2604{
2605 /*** IUnknown methods ***/
2609 /*** ID3DXTextureShader methods ***/
2633};
2634
2635static inline struct d3dx9_texture_shader *unsafe_impl_from_ID3DXTextureShader(ID3DXTextureShader *iface)
2636{
2637 if (!iface)
2638 return NULL;
2639
2640 assert(iface->lpVtbl == &d3dx9_texture_shader_vtbl);
2641 return impl_from_ID3DXTextureShader(iface);
2642}
2643
2644HRESULT WINAPI D3DXCreateTextureShader(const DWORD *function, ID3DXTextureShader **texture_shader)
2645{
2647 unsigned int size;
2648 HRESULT hr;
2649
2650 TRACE("function %p, texture_shader %p.\n", function, texture_shader);
2651
2652 if (!function || !texture_shader)
2653 return D3DERR_INVALIDCALL;
2654
2655 if (*function != FOURCC_TX_1)
2656 return D3DXERR_INVALIDDATA;
2657
2658 if (!(size = D3DXGetShaderSize(function)))
2659 return D3DXERR_INVALIDDATA;
2660
2661 if (!(object = calloc(1, sizeof(*object))))
2662 return E_OUTOFMEMORY;
2663
2664 object->ID3DXTextureShader_iface.lpVtbl = &d3dx9_texture_shader_vtbl;
2665 object->ref = 1;
2666
2667 if (FAILED(hr = D3DXCreateBuffer(size, &object->byte_code)))
2668 {
2669 IUnknown_Release(&object->ID3DXTextureShader_iface);
2670 return hr;
2671 }
2672 memcpy(ID3DXBuffer_GetBufferPointer(object->byte_code), function, size);
2673
2674 if (FAILED(hr = d3dx_init_parameters_store(&object->parameters, 0)))
2675 {
2676 IUnknown_Release(&object->ID3DXTextureShader_iface);
2677 return hr;
2678 }
2679
2681 size, D3DXPT_FLOAT, &object->eval, &object->version_counter, NULL, 0)))
2682 {
2683 IUnknown_Release(&object->ID3DXTextureShader_iface);
2684 return hr;
2685 }
2686
2687 *texture_shader = &object->ID3DXTextureShader_iface;
2688
2689 return D3D_OK;
2690}
2691
2693 const D3DXVECTOR2 *texelsize, void *data)
2694{
2696 struct d3dx_parameter param = { 0 };
2697 float *inputs;
2698
2699 inputs = (float *)shader->eval->pres.regs.tables[PRES_REGTAB_INPUT];
2700
2701 *(inputs++) = texcoord->x;
2702 *(inputs++) = texcoord->y;
2703 *(inputs++) = 0.0f;
2704 *(inputs++) = 0.0f;
2705
2706 *(inputs++) = texelsize->x;
2707 *(inputs++) = texelsize->y;
2708 *(inputs++) = 0.0f;
2709 *(inputs++) = 0.0f;
2710
2711 param.type = D3DXPT_FLOAT;
2712 param.bytes = 4 * sizeof(float);
2714}
2715
2717 const D3DXVECTOR3 *texelsize, void *data)
2718{
2720 struct d3dx_parameter param = { 0 };
2721 float *inputs;
2722
2723 inputs = (float *)shader->eval->pres.regs.tables[PRES_REGTAB_INPUT];
2724
2725 *(inputs++) = texcoord->x;
2726 *(inputs++) = texcoord->y;
2727 *(inputs++) = texcoord->z;
2728 *(inputs++) = 0.0f;
2729
2730 *(inputs++) = texelsize->x;
2731 *(inputs++) = texelsize->y;
2732 *(inputs++) = texelsize->z;
2733 *(inputs++) = 0.0f;
2734
2735 param.type = D3DXPT_FLOAT;
2736 param.bytes = 4 * sizeof(float);
2738}
2739
2740HRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, ID3DXTextureShader *texture_shader)
2741{
2743
2744 TRACE("texture %p, texture_shader %p.\n", texture, texture_shader);
2745
2747}
2748
2749HRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, ID3DXTextureShader *texture_shader)
2750{
2752
2753 TRACE("cube %p, texture_shader %p.\n", cube, texture_shader);
2754
2756}
2757
2758static unsigned int get_instr_length(const DWORD *byte_code, unsigned int major, unsigned int minor)
2759{
2760 DWORD opcode = *byte_code & 0xffff;
2761 unsigned int len = 0;
2762
2763 if (opcode == D3DSIO_COMMENT)
2765
2766 if (major > 1)
2768
2769 switch (opcode)
2770 {
2771 case D3DSIO_END:
2772 ERR("Unexpected END token.\n");
2773 return 0;
2774 case D3DSIO_DEF:
2775 case D3DSIO_DEFI:
2776 return 5;
2777 case D3DSIO_DEFB:
2778 return 2;
2779 default:
2780 ++byte_code;
2781 while (*byte_code & 0x80000000)
2782 {
2783 ++byte_code;
2784 ++len;
2785 }
2786 }
2787
2788 return len;
2789}
2790
2792{
2793 static const D3DDECLUSAGE regtype_usage[] =
2794 {
2797 0,
2799 0,
2802 0,
2803 0,
2805 };
2806 static const D3DDECLUSAGE rast_usage[] =
2807 {
2811 };
2812 uint32_t reg_type, usage, index, version_token = *byte_code;
2813 BOOL is_ps = version_token >> 16 == 0xffff;
2814 unsigned int major, minor, i = 0, j;
2815 BYTE colors = 0, rastout = 0;
2816 BOOL has_dcl, depth = 0;
2817 WORD texcoords = 0;
2818
2819 if ((version_token & 0xffff0000) != 0xfffe0000 && (version_token & 0xffff0000) != 0xffff0000)
2820 return D3DXERR_INVALIDDATA;
2821
2822 major = version_token >> 8 & 0xff;
2823 minor = version_token & 0xff;
2824
2825 TRACE("%s shader, version %u.%u.\n", is_ps ? "Pixel" : "Vertex", major, minor);
2826 ++byte_code;
2827
2828 has_dcl = (!is_ps && (!output || major == 3)) || (is_ps && !output && major >= 2);
2829
2830 while (*byte_code != D3DSIO_END)
2831 {
2832 if (has_dcl && (*byte_code & 0xffff) == D3DSIO_DCL)
2833 {
2834 uint32_t usage_token = byte_code[1];
2835 uint32_t reg = byte_code[2];
2836
2839
2840 if (is_ps && !output && major == 2)
2841 {
2842 /* dcl with no explicit usage, look at the register. */
2846 if (reg_type >= ARRAY_SIZE(regtype_usage))
2847 {
2848 WARN("Invalid register type %u.\n", reg_type);
2849 reg_type = 0;
2850 }
2851 usage = regtype_usage[reg_type];
2852 if (semantics)
2853 {
2854 semantics[i].Usage = usage;
2855 semantics[i].UsageIndex = index;
2856 }
2857 ++i;
2858 }
2859 else if ((!output && reg_type == D3DSPR_INPUT) || (output && reg_type == D3DSPR_OUTPUT))
2860 {
2861 if (semantics)
2862 {
2863 semantics[i].Usage =
2865 semantics[i].UsageIndex =
2867 }
2868 ++i;
2869 }
2870 byte_code += 3;
2871 }
2872 else if (!has_dcl)
2873 {
2874 unsigned int len = get_instr_length(byte_code, major, minor) + 1;
2875
2876 switch (*byte_code & 0xffff)
2877 {
2878 case D3DSIO_COMMENT:
2879 case D3DSIO_DEF:
2880 case D3DSIO_DEFB:
2881 case D3DSIO_DEFI:
2882 byte_code += len;
2883 break;
2884 default:
2885 ++byte_code;
2886 while (*byte_code & 0x80000000)
2887 {
2891
2892 if ((reg_type == D3DSPR_TEMP && is_ps && major == 1)
2893 || (reg_type == D3DSPR_INPUT && is_ps)
2894 || (reg_type == D3DSPR_TEXTURE && is_ps && !output)
2899 {
2900 if (reg_type == D3DSPR_RASTOUT)
2901 rastout |= 1u << index;
2902 else if (reg_type == D3DSPR_DEPTHOUT)
2903 depth = TRUE;
2905 texcoords |= 1u << index;
2906 else
2907 colors |= 1u << index;
2908 }
2909 ++byte_code;
2910 }
2911 }
2912 }
2913 else
2914 {
2916 }
2917 }
2918
2919 if (!has_dcl)
2920 {
2921 i = j = 0;
2922 while (texcoords)
2923 {
2924 if (texcoords & 1)
2925 {
2926 if (semantics)
2927 {
2928 semantics[i].Usage = D3DDECLUSAGE_TEXCOORD;
2929 semantics[i].UsageIndex = j;
2930 }
2931 ++i;
2932 }
2933 texcoords >>= 1;
2934 ++j;
2935 }
2936 j = 0;
2937 while (colors)
2938 {
2939 if (colors & 1)
2940 {
2941 if (semantics)
2942 {
2943 semantics[i].Usage = D3DDECLUSAGE_COLOR;
2944 semantics[i].UsageIndex = j;
2945 }
2946 ++i;
2947 }
2948 colors >>= 1;
2949 ++j;
2950 }
2951 j = 0;
2952 while (rastout)
2953 {
2954 if (rastout & 1)
2955 {
2956 if (j >= ARRAY_SIZE(rast_usage))
2957 {
2958 WARN("Invalid RASTOUT register index.\n");
2959 usage = 0;
2960 }
2961 else
2962 {
2963 usage = rast_usage[j];
2964 }
2965 if (semantics)
2966 {
2967 semantics[i].Usage = usage;
2968 semantics[i].UsageIndex = 0;
2969 }
2970 ++i;
2971 }
2972 rastout >>= 1;
2973 ++j;
2974 }
2975 if (depth)
2976 {
2977 if (semantics)
2978 {
2979 semantics[i].Usage = D3DDECLUSAGE_DEPTH;
2980 semantics[i].UsageIndex = 0;
2981 }
2982 ++i;
2983 }
2984 }
2985
2986 if (count)
2987 *count = i;
2988
2989 return D3D_OK;
2990}
2991
2993{
2994 TRACE("byte_code %p, semantics %p, count %p.\n", byte_code, semantics, count);
2995
2996 return get_shader_semantics(byte_code, semantics, count, FALSE);
2997}
2998
3000{
3001 TRACE("byte_code %p, semantics %p, count %p.\n", byte_code, semantics, count);
3002
3003 return get_shader_semantics(byte_code, semantics, count, TRUE);
3004}
std::map< E_MODULE, HMODULE > mod
Definition: LocaleTests.cpp:68
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
r l[0]
Definition: byte_order.h:168
Definition: _set.h:50
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
#define D3DPS_VERSION(major, minor)
Definition: d3d8types.h:474
#define D3DSI_OPCODE_MASK
Definition: d3d8types.h:306
#define D3DSI_COMMENTSIZE_SHIFT
Definition: d3d8types.h:479
#define D3DSI_COMMENTSIZE_MASK
Definition: d3d8types.h:480
#define D3DSP_REGTYPE_MASK
Definition: d3d8types.h:395
#define D3DVS_VERSION(major, minor)
Definition: d3d8types.h:475
@ D3DSIO_COMMENT
Definition: d3d8types.h:364
@ D3DSIO_END
Definition: d3d8types.h:365
@ D3DSIO_DEF
Definition: d3d8types.h:353
#define D3DSP_REGTYPE_SHIFT
Definition: d3d8types.h:394
@ D3DSPR_TEXTURE
Definition: d3d8types.h:402
@ D3DSPR_RASTOUT
Definition: d3d8types.h:403
@ D3DSPR_TEMP
Definition: d3d8types.h:398
@ D3DSPR_INPUT
Definition: d3d8types.h:399
@ D3DSPR_ATTROUT
Definition: d3d8types.h:404
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1342
#define IDirect3DDevice9_SetPixelShaderConstantI(p, a, b, c)
Definition: d3d9.h:1446
#define IDirect3DDevice9_SetVertexShaderConstantF(p, a, b, c)
Definition: d3d9.h:1429
#define IDirect3DDevice9_SetPixelShaderConstantF(p, a, b, c)
Definition: d3d9.h:1444
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1336
#define IDirect3DDevice9_SetVertexShaderConstantI(p, a, b, c)
Definition: d3d9.h:1431
#define IDirect3DDevice9_SetPixelShaderConstantB(p, a, b, c)
Definition: d3d9.h:1448
#define IDirect3DDevice9_SetVertexShaderConstantB(p, a, b, c)
Definition: d3d9.h:1433
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1335
@ D3DDECLUSAGE_FOG
Definition: d3d9types.h:247
@ D3DDECLUSAGE_TEXCOORD
Definition: d3d9types.h:241
@ D3DDECLUSAGE_DEPTH
Definition: d3d9types.h:248
@ D3DDECLUSAGE_POSITION
Definition: d3d9types.h:236
@ D3DDECLUSAGE_PSIZE
Definition: d3d9types.h:240
@ D3DDECLUSAGE_COLOR
Definition: d3d9types.h:246
#define D3DSP_REGTYPE_MASK2
Definition: d3d9types.h:529
#define D3DSI_INSTLENGTH_SHIFT
Definition: d3d9types.h:372
#define D3DSP_DCL_USAGE_MASK
Definition: d3d9types.h:479
#define D3DSP_REGTYPE_SHIFT2
Definition: d3d9types.h:527
enum _D3DDECLUSAGE D3DDECLUSAGE
#define D3DSP_DCL_USAGE_SHIFT
Definition: d3d9types.h:478
@ D3DSIO_DEFB
Definition: d3d9types.h:423
@ D3DSIO_DCL
Definition: d3d9types.h:407
@ D3DSIO_DEFI
Definition: d3d9types.h:424
#define D3DSI_INSTLENGTH_MASK
Definition: d3d9types.h:371
#define D3DSP_REGNUM_MASK
Definition: d3d9types.h:500
#define D3DSP_DCL_USAGEINDEX_MASK
Definition: d3d9types.h:482
#define D3DSP_DCL_USAGEINDEX_SHIFT
Definition: d3d9types.h:481
@ D3DSPR_DEPTHOUT
Definition: d3d9types.h:544
@ D3DSPR_OUTPUT
Definition: d3d9types.h:541
#define D3D_OK
Definition: d3d.h:106
#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY
Definition: d3dcompiler.h:54
static const WCHAR D3DCOMPILER_DLL_W[]
Definition: d3dcompiler.h:32
#define D3DCOMPILER_DLL_A
Definition: d3dcompiler.h:35
#define D3D_DISASM_ENABLE_COLOR_CODE
Definition: d3dcompiler.h:76
static SIZE_T const char const D3D_SHADER_MACRO ID3DInclude * include
Definition: asm.c:31
static SIZE_T const char const D3D_SHADER_MACRO ID3DInclude UINT ID3DBlob ID3DBlob ** error_messages
Definition: asm.c:32
static SIZE_T const char const D3D_SHADER_MACRO * defines
Definition: asm.c:31
static SIZE_T datasize
Definition: asm.c:30
HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader, ID3DBlob **error_messages)
Definition: compiler.c:652
HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages)
Definition: compiler.c:639
HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T size, UINT flags, const char *comments, ID3DBlob **disassembly)
Definition: compiler.c:668
#define D3DXERR_INVALIDDATA
Definition: compiler.c:53
struct ID3DXBuffer ID3DXBuffer
Definition: d3dx8core.h:51
static void set_number(void *outdata, D3DXPARAMETER_TYPE outtype, const void *indata, D3DXPARAMETER_TYPE intype)
HRESULT d3dx_evaluate_parameter(struct d3dx_param_eval *peval, const struct d3dx_parameter *param, void *param_value)
Definition: preshader.c:1722
const char * debug_d3dxparameter_type(D3DXPARAMETER_TYPE t)
Definition: util.c:344
#define FOURCC_TX_1
Definition: d3dx9_private.h:34
const char * debug_d3dxparameter_registerset(D3DXREGISTER_SET r)
Definition: util.c:374
HRESULT d3dx_create_param_eval(struct d3dx_parameters_store *parameters, void *byte_code, unsigned int byte_code_size, D3DXPARAMETER_TYPE type, struct d3dx_param_eval **peval, ULONG64 *version_counter, const char **skip_constants, unsigned int skip_constants_count)
Definition: preshader.c:1232
HRESULT d3dx_init_parameters_store(struct d3dx_parameters_store *store, unsigned int count)
Definition: effect.c:743
void d3dx_free_param_eval(struct d3dx_param_eval *peval)
Definition: preshader.c:1357
@ PRES_REGTAB_INPUT
void d3dx_parameters_store_cleanup(struct d3dx_parameters_store *store)
Definition: effect.c:754
const char * debug_d3dxparameter_class(D3DXPARAMETER_CLASS c)
Definition: util.c:328
HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, void **buffer, DWORD *length)
Definition: util.c:261
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
LPWSTR Name
Definition: desk.c:124
char comments[4096]
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT32 uint32_t
Definition: types.h:75
HRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer)
Definition: core.c:127
D3DXMATRIX *WINAPI D3DXMatrixTranspose(D3DXMATRIX *out, const D3DXMATRIX *in)
Definition: math.c:873
static HRESULT WINAPI d3dx9_texture_shader_QueryInterface(ID3DXTextureShader *iface, REFIID riid, void **out)
Definition: shader.c:2391
const struct ctab_constant * d3dx_shader_get_ctab_constant(ID3DXConstantTable *iface, D3DXHANDLE constant)
Definition: shader.c:969
static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable *iface, D3DXHANDLE constant, UINT index)
Definition: shader.c:1013
static HRESULT WINAPI d3dx9_texture_shader_GetFunction(ID3DXTextureShader *iface, struct ID3DXBuffer **function)
Definition: shader.c:2437
static HRESULT set_scalar_array(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *indata, UINT count, D3DXPARAMETER_TYPE intype)
Definition: shader.c:1424
HRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, ID3DXTextureShader *texture_shader)
Definition: shader.c:2749
static HRESULT WINAPI d3dx9_fragment_linker_GetDevice(ID3DXFragmentLinker *iface, struct IDirect3DDevice9 **device)
Definition: shader.c:2161
HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:357
HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:588
static struct d3dx9_fragment_linker * impl_from_ID3DXFragmentLinker(ID3DXFragmentLinker *iface)
Definition: shader.c:2113
HRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, ID3DXTextureShader *texture_shader)
Definition: shader.c:2740
void WINAPI texture_shader_fill_3d(D3DXVECTOR4 *out, const D3DXVECTOR3 *texcoord, const D3DXVECTOR3 *texelsize, void *data)
Definition: shader.c:2716
HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table)
Definition: shader.c:1977
static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *vector)
Definition: shader.c:1725
static HRESULT WINAPI d3dx9_texture_shader_SetMatrix(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX *matrix)
Definition: shader.c:2561
static UINT WINAPI ID3DXConstantTableImpl_GetSamplerIndex(ID3DXConstantTable *iface, D3DXHANDLE constant)
Definition: shader.c:996
static void free_constant_table(struct ID3DXConstantTableImpl *table)
Definition: shader.c:728
static HRESULT WINAPI d3dx9_texture_shader_SetValue(ID3DXTextureShader *iface, D3DXHANDLE constant, const void *data, UINT bytes)
Definition: shader.c:2498
static BOOL is_vertex_shader(DWORD version)
Definition: shader.c:748
static struct ctab_constant * get_constant_element_by_name(struct ctab_constant *constant, const char *name)
Definition: shader.c:761
static D3DXHANDLE handle_from_constant(struct ctab_constant *constant)
Definition: shader.c:753
HRESULT WINAPI D3DXCreateFragmentLinkerEx(IDirect3DDevice9 *device, UINT size, DWORD flags, ID3DXFragmentLinker **linker)
Definition: shader.c:2288
HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:666
static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const float *f, UINT count)
Definition: shader.c:1715
CRITICAL_SECTION from_file_mutex
Definition: shader.c:242
UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code)
Definition: shader.c:82
static HRESULT WINAPI d3dx9_texture_shader_SetBoolArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const BOOL *b, UINT count)
Definition: shader.c:2512
const char *WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device)
Definition: shader.c:34
static HRESULT WINAPI d3dx_include_from_file_close(ID3DXInclude *iface, const void *data)
Definition: shader.c:319
HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:416
static struct ctab_constant * get_constant_by_name(struct ID3DXConstantTableImpl *table, struct ctab_constant *constant, const char *name)
Definition: shader.c:799
HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:684
static struct ctab_constant * get_valid_constant(struct ID3DXConstantTableImpl *table, D3DXHANDLE handle)
Definition: shader.c:868
static UINT WINAPI d3dx9_fragment_linker_GetNumberOfFragments(ID3DXFragmentLinker *iface)
Definition: shader.c:2180
HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table)
Definition: shader.c:492
static D3DXHANDLE WINAPI d3dx9_texture_shader_GetConstantElement(ID3DXTextureShader *iface, D3DXHANDLE constant, UINT index)
Definition: shader.c:2484
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrix(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *matrix)
Definition: shader.c:1745
static HRESULT WINAPI d3dx9_texture_shader_SetDefaults(ID3DXTextureShader *iface)
Definition: shader.c:2491
HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:622
static HRESULT WINAPI d3dx9_texture_shader_SetFloat(ID3DXTextureShader *iface, D3DXHANDLE constant, FLOAT f)
Definition: shader.c:2533
static ULONG WINAPI d3dx9_fragment_linker_Release(ID3DXFragmentLinker *iface)
Definition: shader.c:2145
static HRESULT WINAPI d3dx9_fragment_linker_LinkPixelShader(ID3DXFragmentLinker *iface, const char *profile, DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, IDirect3DPixelShader9 **shader, ID3DXBuffer **errors)
Definition: shader.c:2252
static HRESULT WINAPI d3dx9_fragment_linker_ClearCache(ID3DXFragmentLinker *iface)
Definition: shader.c:2262
static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantElement(ID3DXConstantTable *iface, D3DXHANDLE constant, UINT index)
Definition: shader.c:1058
static HRESULT WINAPI d3dx9_fragment_linker_LinkShader(ID3DXFragmentLinker *iface, const char *profile, DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, ID3DXBuffer **buffer, ID3DXBuffer **errors)
Definition: shader.c:2232
static D3DXHANDLE WINAPI d3dx9_texture_shader_GetConstantByName(ID3DXTextureShader *iface, D3DXHANDLE constant, const char *name)
Definition: shader.c:2477
static HRESULT WINAPI d3dx9_fragment_linker_GetFragmentDesc(ID3DXFragmentLinker *iface, D3DXHANDLE name, D3DXFRAGMENT_DESC *desc)
Definition: shader.c:2202
static CRITICAL_SECTION_DEBUG from_file_mutex_debug
Definition: shader.c:233
static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT n)
Definition: shader.c:1685
static HRESULT WINAPI ID3DXConstantTableImpl_SetDefaults(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device)
Definition: shader.c:1567
static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *vector, UINT count)
Definition: shader.c:1735
static DWORD WINAPI ID3DXConstantTableImpl_GetBufferSize(ID3DXConstantTable *iface)
Definition: shader.c:945
static struct d3dx9_texture_shader * impl_from_ID3DXTextureShader(ID3DXTextureShader *iface)
Definition: shader.c:2386
HRESULT WINAPI D3DXGetShaderOutputSemantics(const DWORD *byte_code, D3DXSEMANTIC *semantics, UINT *count)
Definition: shader.c:2999
HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size)
Definition: shader.c:141
static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const BOOL *b, UINT count)
Definition: shader.c:1675
static HRESULT set_matrix_pointer_array(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void **indata, UINT count, BOOL transpose)
Definition: shader.c:1538
static BOOL WINAPI load_d3dassemble_once(INIT_ONCE *once, void *param, void **context)
Definition: shader.c:191
HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table)
Definition: shader.c:567
HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:599
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixPointerArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX **matrix, UINT count)
Definition: shader.c:1765
static HRESULT WINAPI d3dx9_fragment_linker_GetFragment(ID3DXFragmentLinker *iface, D3DXHANDLE name, ID3DXBuffer **buffer)
Definition: shader.c:2224
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTranspose(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *matrix)
Definition: shader.c:1775
DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code)
Definition: shader.c:105
static HRESULT WINAPI d3dx9_texture_shader_SetVector(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXVECTOR4 *vector)
Definition: shader.c:2547
HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:207
void WINAPI texture_shader_fill_2d(D3DXVECTOR4 *out, const D3DXVECTOR2 *texcoord, const D3DXVECTOR2 *texelsize, void *data)
Definition: shader.c:2692
static HRESULT WINAPI d3dx9_texture_shader_SetMatrixArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX *matrix, UINT count)
Definition: shader.c:2568
static struct ctab_constant * is_valid_sub_constant(struct ctab_constant *parent, D3DXHANDLE handle)
Definition: shader.c:847
static D3DXHANDLE WINAPI d3dx9_fragment_linker_GetFragmentHandleByIndex(ID3DXFragmentLinker *iface, UINT index)
Definition: shader.c:2187
static HRESULT set_vector(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *indata, D3DXPARAMETER_TYPE intype)
Definition: shader.c:1451
static ULONG WINAPI d3dx9_texture_shader_AddRef(ID3DXTextureShader *iface)
Definition: shader.c:2408
HRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count)
Definition: shader.c:2318
static HRESULT set_vector_array(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *indata, UINT count, D3DXPARAMETER_TYPE intype)
Definition: shader.c:1481
HRESULT WINAPI D3DXCompileShader(const char *data, UINT length, const D3DXMACRO *defines, ID3DXInclude *include, const char *function, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table)
Definition: shader.c:434
HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table)
Definition: shader.c:546
static ULONG WINAPI d3dx9_fragment_linker_AddRef(ID3DXFragmentLinker *iface)
Definition: shader.c:2135
static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const INT *n, UINT count)
Definition: shader.c:1695
static HRESULT WINAPI d3dx_include_from_file_open(ID3DXInclude *iface, D3DXINCLUDE_TYPE include_type, const char *filename, const void *parent_data, const void **data, UINT *bytes)
Definition: shader.c:249
static BOOL is_valid_bytecode(DWORD token)
Definition: shader.c:29
static HRESULT WINAPI d3dx9_fragment_linker_AddFragments(ID3DXFragmentLinker *iface, const DWORD *fragments)
Definition: shader.c:2210
HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:334
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *matrix, UINT count)
Definition: shader.c:1755
static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, float f)
Definition: shader.c:1705
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposePointerArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX **matrix, UINT count)
Definition: shader.c:1795
static struct ID3DXConstantTableImpl * impl_from_ID3DXConstantTable(ID3DXConstantTable *iface)
Definition: shader.c:743
HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages)
Definition: shader.c:398
static struct d3dx9_texture_shader * unsafe_impl_from_ID3DXTextureShader(ID3DXTextureShader *iface)
Definition: shader.c:2635
static HRESULT WINAPI d3dx9_texture_shader_SetFloatArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const FLOAT *f, UINT count)
Definition: shader.c:2540
static HRESULT parse_ctab_constant_type(const char *ctab, DWORD typeoffset, struct ctab_constant *constant, BOOL is_element, WORD index, WORD max_index, DWORD *offset, DWORD nameoffset, UINT regset)
Definition: shader.c:1839
static const struct ID3DXTextureShaderVtbl d3dx9_texture_shader_vtbl
Definition: shader.c:2603
static HRESULT WINAPI ID3DXConstantTableImpl_GetDesc(ID3DXConstantTable *iface, D3DXCONSTANTTABLE_DESC *desc)
Definition: shader.c:955
static DWORD get_index(const void **indata, UINT index, BOOL is_pointer)
Definition: shader.c:1076
static HRESULT WINAPI d3dx9_texture_shader_SetMatrixTransposePointerArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX **matrix, UINT count)
Definition: shader.c:2596
static HRESULT get_shader_semantics(const DWORD *byte_code, D3DXSEMANTIC *semantics, UINT *count, BOOL output)
Definition: shader.c:2791
static const struct ID3DXFragmentLinkerVtbl d3dx9_fragment_linker_vtbl
Definition: shader.c:2269
static void *WINAPI ID3DXConstantTableImpl_GetBufferPointer(ID3DXConstantTable *iface)
Definition: shader.c:936
const char *WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device)
Definition: shader.c:112
static const void * main_file_data
Definition: shader.c:231
static HRESULT WINAPI d3dx9_fragment_linker_LinkVertexShader(ID3DXFragmentLinker *iface, const char *profile, DWORD flags, const D3DXHANDLE *handles, UINT fragment_count, IDirect3DVertexShader9 **shader, ID3DXBuffer **errors)
Definition: shader.c:2242
static void free_constant(struct ctab_constant *constant)
Definition: shader.c:714
HRESULT WINAPI D3DXGetShaderInputSemantics(const DWORD *byte_code, D3DXSEMANTIC *semantics, UINT *count)
Definition: shader.c:2992
HRESULT WINAPI D3DXCreateTextureShader(const DWORD *function, ID3DXTextureShader **texture_shader)
Definition: shader.c:2644
static HRESULT WINAPI d3dx9_fragment_linker_QueryInterface(ID3DXFragmentLinker *iface, REFIID riid, void **out)
Definition: shader.c:2118
const struct ID3DXIncludeVtbl d3dx_include_from_file_vtbl
Definition: shader.c:328
static HRESULT WINAPI d3dx9_texture_shader_SetIntArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const INT *n, UINT count)
Definition: shader.c:2526
static ULONG WINAPI ID3DXConstantTableImpl_AddRef(ID3DXConstantTable *iface)
Definition: shader.c:909
static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByName(ID3DXConstantTable *iface, D3DXHANDLE constant, const char *name)
Definition: shader.c:1044
static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposeArray(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *matrix, UINT count)
Definition: shader.c:1785
static ULONG WINAPI ID3DXConstantTableImpl_Release(ID3DXConstantTable *iface)
Definition: shader.c:919
static HRESULT WINAPI ID3DXConstantTableImpl_QueryInterface(ID3DXConstantTable *iface, REFIID riid, void **out)
Definition: shader.c:891
static HRESULT WINAPI d3dx9_texture_shader_SetInt(ID3DXTextureShader *iface, D3DXHANDLE constant, INT n)
Definition: shader.c:2519
HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table)
Definition: shader.c:2097
static HRESULT WINAPI d3dx9_texture_shader_SetVectorArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXVECTOR4 *vector, UINT count)
Definition: shader.c:2554
static HRESULT WINAPI d3dx9_texture_shader_SetMatrixTransposeArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX *matrix, UINT count)
Definition: shader.c:2589
static HRESULT WINAPI d3dx9_texture_shader_GetConstantDesc(ID3DXTextureShader *iface, D3DXHANDLE constant, D3DXCONSTANT_DESC *constant_desc, UINT *count)
Definition: shader.c:2463
static HRESULT WINAPI ID3DXConstantTableImpl_GetConstantDesc(ID3DXConstantTable *iface, D3DXHANDLE constant, D3DXCONSTANT_DESC *desc, UINT *count)
Definition: shader.c:976
static D3DXHANDLE WINAPI d3dx9_fragment_linker_GetFragmentHandleByName(ID3DXFragmentLinker *iface, const char *name)
Definition: shader.c:2194
static HRESULT WINAPI d3dx9_texture_shader_GetDesc(ID3DXTextureShader *iface, D3DXCONSTANTTABLE_DESC *desc)
Definition: shader.c:2456
static ULONG WINAPI d3dx9_texture_shader_Release(ID3DXTextureShader *iface)
Definition: shader.c:2418
static D3DXHANDLE WINAPI d3dx9_texture_shader_GetConstant(ID3DXTextureShader *iface, D3DXHANDLE constant, UINT index)
Definition: shader.c:2470
static HRESULT WINAPI d3dx9_texture_shader_GetConstantBuffer(ID3DXTextureShader *iface, struct ID3DXBuffer **constant_buffer)
Definition: shader.c:2449
static HRESULT WINAPI d3dx9_texture_shader_SetMatrixTranspose(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX *matrix)
Definition: shader.c:2582
HRESULT WINAPI D3DXCreateFragmentLinker(IDirect3DDevice9 *device, UINT size, ID3DXFragmentLinker **linker)
Definition: shader.c:2311
static HRESULT WINAPI d3dx9_fragment_linker_GetAllFragments(ID3DXFragmentLinker *iface, ID3DXBuffer **buffer)
Definition: shader.c:2217
static HRESULT WINAPI d3dx9_texture_shader_SetMatrixPointerArray(ID3DXTextureShader *iface, D3DXHANDLE constant, const D3DXMATRIX **matrix, UINT count)
Definition: shader.c:2575
static HRESULT set_scalar(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *indata, D3DXPARAMETER_TYPE intype)
Definition: shader.c:1394
static unsigned int get_instr_length(const DWORD *byte_code, unsigned int major, unsigned int minor)
Definition: shader.c:2758
static HRESULT set_matrix_array(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, D3DXHANDLE constant, const void *indata, UINT count, BOOL transpose)
Definition: shader.c:1509
static HRESULT WINAPI d3dx9_texture_shader_SetBool(ID3DXTextureShader *iface, D3DXHANDLE constant, BOOL b)
Definition: shader.c:2505
static HRESULT WINAPI ID3DXConstantTableImpl_SetBool(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, BOOL b)
Definition: shader.c:1665
HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines, ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table)
Definition: shader.c:464
HRESULT WINAPI D3DXDisassembleShader(const DWORD *shader, BOOL colorcode, const char *comments, ID3DXBuffer **buffer)
Definition: shader.c:2366
static HRESULT WINAPI ID3DXConstantTableImpl_SetValue(struct ID3DXConstantTable *iface, struct IDirect3DDevice9 *device, D3DXHANDLE constant, const void *data, unsigned int bytes)
Definition: shader.c:1631
static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl
Definition: shader.c:1805
HRESULT WINAPI D3DXFillTexture(struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *funcdata)
Definition: texture.c:1267
HRESULT WINAPI D3DXFillCubeTexture(struct IDirect3DCubeTexture9 *texture, LPD3DXFILL3D function, void *funcdata)
Definition: texture.c:1657
#define CloseHandle
Definition: compat.h:739
#define CP_ACP
Definition: compat.h:109
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
#define FILE_SHARE_READ
Definition: compat.h:136
static const WCHAR version[]
Definition: asmname.c:66
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
Definition: InitOnce.c:12
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP int __cdecl atoi(const char *)
Definition: string.c:1720
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
_ACRTIMP size_t __cdecl strcspn(const char *, const char *)
Definition: string.c:3498
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
Definition: string.c:3335
_ACRTIMP char *__cdecl strrchr(const char *, int)
Definition: string.c:3303
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: ddsformat.c:45
return ret
Definition: mutex.c:147
r parent
Definition: btrfs.c:3010
#define D3DPS20CAPS_NODEPENDENTREADLIMIT
Definition: d3d9caps.h:228
#define D3DPS20CAPS_GRADIENTINSTRUCTIONS
Definition: d3d9caps.h:226
#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT
Definition: d3d9caps.h:229
#define D3DPS20CAPS_PREDICATION
Definition: d3d9caps.h:227
#define D3DPS20CAPS_ARBITRARYSWIZZLE
Definition: d3d9caps.h:225
#define ID3DXBuffer_GetBufferPointer(p)
Definition: d3dx9core.h:85
#define ID3DXBuffer_Release(p)
Definition: d3dx9core.h:83
#define ID3DXBuffer_AddRef(p)
Definition: d3dx9core.h:82
#define D3DX_SDK_VERSION
Definition: d3dx9core.h:31
@ D3DXINC_LOCAL
Definition: d3dx9shader.h:288
D3DXPARAMETER_CLASS
Definition: d3dx9shader.h:61
@ D3DXPC_SCALAR
Definition: d3dx9shader.h:62
@ D3DXPC_MATRIX_COLUMNS
Definition: d3dx9shader.h:65
@ D3DXPC_STRUCT
Definition: d3dx9shader.h:67
@ D3DXPC_MATRIX_ROWS
Definition: d3dx9shader.h:64
@ D3DXPC_VECTOR
Definition: d3dx9shader.h:63
@ D3DXPC_OBJECT
Definition: d3dx9shader.h:66
#define ID3DXInclude_Close(p, a)
Definition: d3dx9shader.h:304
struct _D3DXSHADER_TYPEINFO * LPD3DXSHADER_TYPEINFO
@ D3DXRS_FLOAT4
Definition: d3dx9shader.h:55
@ D3DXRS_BOOL
Definition: d3dx9shader.h:53
@ D3DXRS_INT4
Definition: d3dx9shader.h:54
@ D3DXRS_SAMPLER
Definition: d3dx9shader.h:56
const char * D3DXHANDLE
Definition: d3dx9shader.h:48
#define D3DXCONSTTABLE_LARGEADDRESSAWARE
Definition: d3dx9shader.h:46
enum _D3DXINCLUDE_TYPE D3DXINCLUDE_TYPE
#define ID3DXInclude_Open(p, a, b, c, d, e)
Definition: d3dx9shader.h:303
D3DXPARAMETER_TYPE
Definition: d3dx9shader.h:72
@ D3DXPT_SAMPLER3D
Definition: d3dx9shader.h:86
@ D3DXPT_SAMPLERCUBE
Definition: d3dx9shader.h:87
@ D3DXPT_FLOAT
Definition: d3dx9shader.h:76
@ D3DXPT_BOOL
Definition: d3dx9shader.h:74
@ D3DXPT_INT
Definition: d3dx9shader.h:75
@ D3DXPT_SAMPLER
Definition: d3dx9shader.h:83
@ D3DXPT_SAMPLER1D
Definition: d3dx9shader.h:84
@ D3DXPT_SAMPLER2D
Definition: d3dx9shader.h:85
#define ID3DXConstantTable_AddRef(p)
Definition: d3dx9shader.h:176
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FT_Vector * vec
Definition: ftbbox.c:469
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble t
Definition: gl.h:2047
GLdouble n
Definition: glext.h:7729
GLenum GLuint texture
Definition: glext.h:6295
GLuint res
Definition: glext.h:9613
GLuint * samplers
Definition: glext.h:7280
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
const GLubyte * c
Definition: glext.h:8905
GLuint shader
Definition: glext.h:6030
GLuint index
Definition: glext.h:6031
GLfloat f
Definition: glext.h:7540
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLsizei GLboolean transpose
Definition: glext.h:6077
GLuint GLenum matrix
Definition: glext.h:9407
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLfloat GLfloat p
Definition: glext.h:8902
GLfloat param
Definition: glext.h:5796
GLenum GLsizei len
Definition: glext.h:6722
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
const GLfloat * m
Definition: glext.h:10848
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
unsigned int UINT
Definition: sysinfo.c:13
__in WDFOBJECT __in PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo
Definition: handleapi.cpp:601
static ID3DXConstantTable ** constant_table
Definition: hlsl_d3d9.c:32
static int reg
Definition: i386-dis.c:1290
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
const char * filename
Definition: ioapi.h:137
#define cin
Definition: iostream.cpp:37
#define c
Definition: ke_i.h:80
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
#define profile
Definition: kernel32.h:12
#define debugstr_w
Definition: kernel32.h:32
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
char pathname[512]
Definition: util.h:13
unsigned __int64 ULONG64
Definition: imports.h:198
static PVOID ptr
Definition: dispmode.c:27
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
D3DXREGISTER_SET regset
Definition: shader.c:5881
static const MAT2 mat
Definition: font.c:51
static const LARGE_INTEGER *static const HANDLE const LARGE_INTEGER *static PSLIST_ENTRY PSLIST_ENTRY last
Definition: sync.c:64
static float(__cdecl *square_half_float)(float x
#define min(a, b)
Definition: monoChain.cc:55
short WCHAR
Definition: pedump.c:58
#define RT_RCDATA
Definition: pedump.c:372
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
strcpy
Definition: string.h:131
#define minor(rdev)
Definition: propsheet.cpp:929
#define major(rdev)
Definition: propsheet.cpp:928
#define TRACE(s)
Definition: solgame.cpp:4
enum vkd3d_shader_register_type reg_type
Definition: spirv.c:4885
FLOAT x
Definition: d3dx9math.h:64
FLOAT y
Definition: d3dx9math.h:64
ID3DXConstantTable ID3DXConstantTable_iface
Definition: shader.c:705
struct ctab_constant * constants
Definition: shader.c:711
D3DXCONSTANTTABLE_DESC desc
Definition: shader.c:710
DWORD PixelShaderVersion
Definition: d3d9caps.h:315
D3DVSHADERCAPS2_0 VS20Caps
Definition: d3d9caps.h:326
DWORD VertexShaderVersion
Definition: d3d9caps.h:313
D3DPSHADERCAPS2_0 PS20Caps
Definition: d3d9caps.h:327
INT DynamicFlowControlDepth
Definition: d3d9caps.h:246
Definition: http.c:7252
struct IDirect3DDevice9 * device
Definition: shader.c:2109
ID3DXFragmentLinker ID3DXFragmentLinker_iface
Definition: shader.c:2106
ID3DXBuffer * byte_code
Definition: shader.c:2380
struct d3dx_param_eval * eval
Definition: shader.c:2383
ID3DXTextureShader ID3DXTextureShader_iface
Definition: shader.c:2377
struct d3dx_parameters_store parameters
Definition: shader.c:2382
ULONG64 version_counter
Definition: shader.c:2381
ID3DXInclude ID3DXInclude_iface
Definition: devices.h:37
Definition: fci.c:123
Definition: name.c:39
#define max(a, b)
Definition: svc.c:63
#define DWORD_PTR
Definition: treelist.c:76
float FLOAT
Definition: typedefs.h:69
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
static EFI_HANDLE * handles
Definition: uefidisk.c:66
static INIT_ONCE init_once
Definition: vfwcapture.c:981
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INVALID_FILE_SIZE
Definition: winbase.h:528
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
RTL_RUN_ONCE INIT_ONCE
Definition: winbase.h:3654
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:591
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
_In_ ULONG Rows
Definition: haltypes.h:17
unsigned char BYTE
Definition: xxhash.c:193