vkd3d  1.4
The vkd3d 3D Graphics Library
vkd3d_shader.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017-2019 Józef Kucia for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #ifndef __VKD3D_SHADER_H
20 #define __VKD3D_SHADER_H
21 
22 #include <stdbool.h>
23 #include <stdint.h>
24 #include <vkd3d_types.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* __cplusplus */
29 
43 {
44  VKD3D_SHADER_API_VERSION_1_0,
45  VKD3D_SHADER_API_VERSION_1_1,
46  VKD3D_SHADER_API_VERSION_1_2,
47  VKD3D_SHADER_API_VERSION_1_3,
48  VKD3D_SHADER_API_VERSION_1_4,
49 };
50 
53 {
66 
82 
83  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STRUCTURE_TYPE),
84 };
85 
93 {
98 
99  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV),
100 };
101 
102 enum vkd3d_shader_compile_option_formatting_flags
103 {
104  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_NONE = 0x00000000,
105  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR = 0x00000001,
106  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT = 0x00000002,
107  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS = 0x00000004,
108  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER = 0x00000008,
109  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS = 0x00000010,
110 
111  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_FORMATTING_FLAGS),
112 };
113 
115 {
130 
131  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_NAME),
132 };
133 
140 {
147  unsigned int value;
148 };
149 
152 {
165 
168 
169  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_VISIBILITY),
170 };
171 
174 {
182  const void *code;
184  size_t size;
185 };
186 
189 {
210 
211  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_TYPE),
212 };
213 
219 {
224  unsigned int set;
226  unsigned int binding;
232  unsigned int count;
233 };
234 
235 enum vkd3d_shader_binding_flag
236 {
237  VKD3D_SHADER_BINDING_FLAG_BUFFER = 0x00000001,
238  VKD3D_SHADER_BINDING_FLAG_IMAGE = 0x00000002,
239 
240  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_BINDING_FLAG),
241 };
242 
243 enum vkd3d_shader_parameter_type
244 {
245  VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN,
246  VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT,
247  VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT,
248 
249  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_TYPE),
250 };
251 
252 enum vkd3d_shader_parameter_data_type
253 {
254  VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN,
255  VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32,
256 
257  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_DATA_TYPE),
258 };
259 
260 enum vkd3d_shader_parameter_name
261 {
262  VKD3D_SHADER_PARAMETER_NAME_UNKNOWN,
263  VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT,
264 
265  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_NAME),
266 };
267 
269 {
270  union
271  {
272  uint32_t u32;
273  } u;
274 };
275 
277 {
278  uint32_t id;
279 };
280 
282 {
283  enum vkd3d_shader_parameter_name name;
284  enum vkd3d_shader_parameter_type type;
285  enum vkd3d_shader_parameter_data_type data_type;
286  union
287  {
288  struct vkd3d_shader_parameter_immediate_constant immediate_constant;
289  struct vkd3d_shader_parameter_specialization_constant specialization_constant;
290  } u;
291 };
292 
309 {
316  unsigned int register_space;
318  unsigned int register_index;
322  unsigned int flags;
323 
326 };
327 
328 #define VKD3D_SHADER_DUMMY_SAMPLER_INDEX ~0u
329 
337 {
342  unsigned int resource_space;
344  unsigned int resource_index;
349  unsigned int sampler_space;
351  unsigned int sampler_index;
355  unsigned int flags;
356 
359 };
360 
367 {
372  unsigned int register_space;
374  unsigned int register_index;
377 
380  unsigned int offset;
381 };
382 
390 {
395  unsigned int register_space;
397  unsigned int register_index;
400 
402  unsigned int offset;
404  unsigned int size;
405 };
406 
424 {
428  const void *next;
429 
433  unsigned int binding_count;
434 
439 
444 
448  unsigned int uav_counter_count;
449 };
450 
452 {
453  unsigned int stream_index;
454  const char *semantic_name;
455  unsigned int semantic_index;
456  uint8_t component_index;
457  uint8_t component_count;
458  uint8_t output_slot;
459 };
460 
461 /* Extends vkd3d_shader_interface_info. */
463 {
464  enum vkd3d_shader_structure_type type;
465  const void *next;
466 
467  const struct vkd3d_shader_transform_feedback_element *elements;
468  unsigned int element_count;
469  const unsigned int *buffer_strides;
470  unsigned int buffer_stride_count;
471 };
472 
474 {
475  unsigned int static_offset;
476  unsigned int dynamic_offset_index;
477 };
478 
491 {
495  const void *next;
496 
505 
548 
555 };
556 
559 {
577 
578  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SOURCE_TYPE),
579 };
580 
583 {
594  VKD3D_SHADER_TARGET_SPIRV_TEXT,
613 
614  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TARGET_TYPE),
615 };
616 
622 {
633 
634  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_LOG_LEVEL),
635 };
636 
641 {
649  const void *next;
650 
652  struct vkd3d_shader_code source;
653 
658 
671  unsigned int option_count;
672 
679  const char *source_name;
680 };
681 
682 enum vkd3d_shader_spirv_environment
683 {
684  VKD3D_SHADER_SPIRV_ENVIRONMENT_NONE,
685  VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5,
686  VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0, /* default target */
687 
688  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SPIRV_ENVIRONMENT),
689 };
690 
692 {
693  VKD3D_SHADER_SPIRV_EXTENSION_NONE,
694  VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION,
699 
700  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SPIRV_EXTENSION),
701 };
702 
703 /* Extends vkd3d_shader_compile_info. */
705 {
706  enum vkd3d_shader_structure_type type;
707  const void *next;
708 
709  const char *entry_point; /* "main" if NULL. */
710 
711  enum vkd3d_shader_spirv_environment environment;
712 
713  const enum vkd3d_shader_spirv_extension *extensions;
714  unsigned int extension_count;
715 
716  const struct vkd3d_shader_parameter *parameters;
717  unsigned int parameter_count;
718 
719  bool dual_source_blending;
720  const unsigned int *output_swizzles;
721  unsigned int output_swizzle_count;
722 };
723 
724 enum vkd3d_shader_tessellator_output_primitive
725 {
726  VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT = 0x1,
727  VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE = 0x2,
728  VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW = 0x3,
729  VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 0x4,
730 
731  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_OUTPUT_PRIMITIVE),
732 };
733 
734 enum vkd3d_shader_tessellator_partitioning
735 {
736  VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER = 0x1,
737  VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2 = 0x2,
738  VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 0x3,
739  VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 0x4,
740 
741  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_PARTITIONING),
742 };
743 
744 /* Extends vkd3d_shader_spirv_target_info. */
746 {
747  enum vkd3d_shader_structure_type type;
748  const void *next;
749 
750  enum vkd3d_shader_tessellator_output_primitive output_primitive;
751  enum vkd3d_shader_tessellator_partitioning partitioning;
752 };
753 
759 {
765  const char *name;
771  const char *value;
772 };
773 
802 typedef int (*PFN_vkd3d_shader_open_include)(const char *filename, bool local,
803  const char *parent_data, void *context, struct vkd3d_shader_code *out);
817 typedef void (*PFN_vkd3d_shader_close_include)(const struct vkd3d_shader_code *code, void *context);
818 
831 {
835  const void *next;
836 
845  const struct vkd3d_shader_macro *macros;
847  unsigned int macro_count;
848 
877 };
878 
891 {
895  const void *next;
896 
903  const char *entry_point;
904  struct vkd3d_shader_code secondary_code;
909  const char *profile;
910 };
911 
912 /* root signature 1.0 */
913 enum vkd3d_shader_filter
914 {
915  VKD3D_SHADER_FILTER_MIN_MAG_MIP_POINT = 0x000,
916  VKD3D_SHADER_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x001,
917  VKD3D_SHADER_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x004,
918  VKD3D_SHADER_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x005,
919  VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x010,
920  VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x011,
921  VKD3D_SHADER_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x014,
922  VKD3D_SHADER_FILTER_MIN_MAG_MIP_LINEAR = 0x015,
923  VKD3D_SHADER_FILTER_ANISOTROPIC = 0x055,
924  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x080,
925  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x081,
926  VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x084,
927  VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x085,
928  VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x090,
929  VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x091,
930  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x094,
931  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x095,
932  VKD3D_SHADER_FILTER_COMPARISON_ANISOTROPIC = 0x0d5,
933  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
934  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
935  VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
936  VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
937  VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
938  VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
939  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
940  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
941  VKD3D_SHADER_FILTER_MINIMUM_ANISOTROPIC = 0x155,
942  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
943  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
944  VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
945  VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
946  VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
947  VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
948  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
949  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
950  VKD3D_SHADER_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,
951 
952  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_FILTER),
953 };
954 
955 enum vkd3d_shader_texture_address_mode
956 {
957  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_WRAP = 0x1,
958  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR = 0x2,
959  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_CLAMP = 0x3,
960  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_BORDER = 0x4,
961  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 0x5,
962 
963  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TEXTURE_ADDRESS_MODE),
964 };
965 
966 enum vkd3d_shader_comparison_func
967 {
968  VKD3D_SHADER_COMPARISON_FUNC_NEVER = 0x1,
969  VKD3D_SHADER_COMPARISON_FUNC_LESS = 0x2,
970  VKD3D_SHADER_COMPARISON_FUNC_EQUAL = 0x3,
971  VKD3D_SHADER_COMPARISON_FUNC_LESS_EQUAL = 0x4,
972  VKD3D_SHADER_COMPARISON_FUNC_GREATER = 0x5,
973  VKD3D_SHADER_COMPARISON_FUNC_NOT_EQUAL = 0x6,
974  VKD3D_SHADER_COMPARISON_FUNC_GREATER_EQUAL = 0x7,
975  VKD3D_SHADER_COMPARISON_FUNC_ALWAYS = 0x8,
976 
977  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPARISON_FUNC),
978 };
979 
980 enum vkd3d_shader_static_border_colour
981 {
982  VKD3D_SHADER_STATIC_BORDER_COLOUR_TRANSPARENT_BLACK = 0x0,
983  VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_BLACK = 0x1,
984  VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_WHITE = 0x2,
985 
986  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STATIC_BORDER_COLOUR),
987 };
988 
990 {
991  enum vkd3d_shader_filter filter;
992  enum vkd3d_shader_texture_address_mode address_u;
993  enum vkd3d_shader_texture_address_mode address_v;
994  enum vkd3d_shader_texture_address_mode address_w;
995  float mip_lod_bias;
996  unsigned int max_anisotropy;
997  enum vkd3d_shader_comparison_func comparison_func;
998  enum vkd3d_shader_static_border_colour border_colour;
999  float min_lod;
1000  float max_lod;
1001  unsigned int shader_register;
1002  unsigned int register_space;
1003  enum vkd3d_shader_visibility shader_visibility;
1004 };
1005 
1007 {
1008  enum vkd3d_shader_descriptor_type range_type;
1009  unsigned int descriptor_count;
1010  unsigned int base_shader_register;
1011  unsigned int register_space;
1012  unsigned int descriptor_table_offset;
1013 };
1014 
1016 {
1017  unsigned int descriptor_range_count;
1018  const struct vkd3d_shader_descriptor_range *descriptor_ranges;
1019 };
1020 
1022 {
1023  unsigned int shader_register;
1024  unsigned int register_space;
1025  unsigned int value_count;
1026 };
1027 
1029 {
1030  unsigned int shader_register;
1031  unsigned int register_space;
1032 };
1033 
1034 enum vkd3d_shader_root_parameter_type
1035 {
1036  VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0x0,
1037  VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 0x1,
1038  VKD3D_SHADER_ROOT_PARAMETER_TYPE_CBV = 0x2,
1039  VKD3D_SHADER_ROOT_PARAMETER_TYPE_SRV = 0x3,
1040  VKD3D_SHADER_ROOT_PARAMETER_TYPE_UAV = 0x4,
1041 
1042  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_PARAMETER_TYPE),
1043 };
1044 
1046 {
1047  enum vkd3d_shader_root_parameter_type parameter_type;
1048  union
1049  {
1050  struct vkd3d_shader_root_descriptor_table descriptor_table;
1051  struct vkd3d_shader_root_constants constants;
1052  struct vkd3d_shader_root_descriptor descriptor;
1053  } u;
1054  enum vkd3d_shader_visibility shader_visibility;
1055 };
1056 
1057 enum vkd3d_shader_root_signature_flags
1058 {
1059  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_NONE = 0x00,
1060  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01,
1061  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02,
1062  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04,
1063  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08,
1064  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
1065  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
1066  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,
1067 
1068  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_FLAGS),
1069 };
1070 
1072 {
1073  unsigned int parameter_count;
1074  const struct vkd3d_shader_root_parameter *parameters;
1075  unsigned int static_sampler_count;
1076  const struct vkd3d_shader_static_sampler_desc *static_samplers;
1077  enum vkd3d_shader_root_signature_flags flags;
1078 };
1079 
1080 /* root signature 1.1 */
1081 enum vkd3d_shader_root_descriptor_flags
1082 {
1083  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_NONE = 0x0,
1084  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2,
1085  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
1086  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8,
1087 
1088  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_DESCRIPTOR_FLAGS),
1089 };
1090 
1091 enum vkd3d_shader_descriptor_range_flags
1092 {
1093  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_NONE = 0x0,
1094  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1,
1095  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2,
1096  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
1097  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8,
1098 
1099  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_RANGE_FLAGS),
1100 };
1101 
1103 {
1104  enum vkd3d_shader_descriptor_type range_type;
1105  unsigned int descriptor_count;
1106  unsigned int base_shader_register;
1107  unsigned int register_space;
1108  enum vkd3d_shader_descriptor_range_flags flags;
1109  unsigned int descriptor_table_offset;
1110 };
1111 
1113 {
1114  unsigned int descriptor_range_count;
1115  const struct vkd3d_shader_descriptor_range1 *descriptor_ranges;
1116 };
1117 
1119 {
1120  unsigned int shader_register;
1121  unsigned int register_space;
1122  enum vkd3d_shader_root_descriptor_flags flags;
1123 };
1124 
1126 {
1127  enum vkd3d_shader_root_parameter_type parameter_type;
1128  union
1129  {
1130  struct vkd3d_shader_root_descriptor_table1 descriptor_table;
1131  struct vkd3d_shader_root_constants constants;
1132  struct vkd3d_shader_root_descriptor1 descriptor;
1133  } u;
1134  enum vkd3d_shader_visibility shader_visibility;
1135 };
1136 
1138 {
1139  unsigned int parameter_count;
1140  const struct vkd3d_shader_root_parameter1 *parameters;
1141  unsigned int static_sampler_count;
1142  const struct vkd3d_shader_static_sampler_desc *static_samplers;
1143  enum vkd3d_shader_root_signature_flags flags;
1144 };
1145 
1146 enum vkd3d_shader_root_signature_version
1147 {
1148  VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
1149  VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1 = 0x2,
1150 
1151  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_VERSION),
1152 };
1153 
1155 {
1156  enum vkd3d_shader_root_signature_version version;
1157  union
1158  {
1159  struct vkd3d_shader_root_signature_desc v_1_0;
1160  struct vkd3d_shader_root_signature_desc1 v_1_1;
1161  } u;
1162 };
1163 
1169 {
1195 
1196  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_TYPE),
1197 };
1198 
1204 {
1225 
1226  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
1227 };
1228 
1234 {
1244 
1245  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_INFO_FLAG),
1246 };
1247 
1253 {
1260  unsigned int register_space;
1262  unsigned int register_index;
1271  unsigned int flags;
1276  unsigned int count;
1277 };
1278 
1285 {
1291  const void *next;
1292 
1296  unsigned int descriptor_count;
1297 };
1298 
1304 {
1317 
1318  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPONENT_TYPE),
1319 };
1320 
1323 {
1346  VKD3D_SHADER_SV_TESS_FACTOR_QUADEDGE = 0x0b,
1347  VKD3D_SHADER_SV_TESS_FACTOR_QUADINT = 0x0c,
1348  VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE = 0x0d,
1349  VKD3D_SHADER_SV_TESS_FACTOR_TRIINT = 0x0e,
1350  VKD3D_SHADER_SV_TESS_FACTOR_LINEDET = 0x0f,
1351  VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN = 0x10,
1352 
1353  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SYSVAL_SEMANTIC),
1354 };
1355 
1361 {
1362  VKD3D_SHADER_MINIMUM_PRECISION_NONE = 0,
1371 
1372  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_MINIMUM_PRECISION),
1373 };
1374 
1379 {
1381  const char *semantic_name;
1383  unsigned int semantic_index;
1388  unsigned int stream_index;
1397  unsigned int register_index;
1399  unsigned int mask;
1406  unsigned int used_mask;
1409 };
1410 
1419 {
1423  unsigned int element_count;
1424 };
1425 
1428 {
1429  VKD3D_SHADER_SWIZZLE_X = 0x0,
1430  VKD3D_SHADER_SWIZZLE_Y = 0x1,
1431  VKD3D_SHADER_SWIZZLE_Z = 0x2,
1432  VKD3D_SHADER_SWIZZLE_W = 0x3,
1433 
1434  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SWIZZLE_COMPONENT),
1435 };
1436 
1441 #define VKD3D_SHADER_SWIZZLE_MASK (0xffu)
1443 #define VKD3D_SHADER_SWIZZLE_SHIFT(idx) (8u * (idx))
1444 
1454 #define VKD3D_SHADER_SWIZZLE(x, y, z, w) \
1455  vkd3d_shader_create_swizzle(VKD3D_SHADER_SWIZZLE_ ## x, \
1456  VKD3D_SHADER_SWIZZLE_ ## y, \
1457  VKD3D_SHADER_SWIZZLE_ ## z, \
1458  VKD3D_SHADER_SWIZZLE_ ## w)
1459 
1461 #define VKD3D_SHADER_NO_SWIZZLE VKD3D_SHADER_SWIZZLE(X, Y, Z, W)
1462 
1467 {
1472 }
1473 
1474 #ifdef LIBVKD3D_SHADER_SOURCE
1475 # define VKD3D_SHADER_API VKD3D_EXPORT
1476 #else
1477 # define VKD3D_SHADER_API VKD3D_IMPORT
1478 #endif
1479 
1480 #ifndef VKD3D_SHADER_NO_PROTOTYPES
1481 
1493 VKD3D_SHADER_API const char *vkd3d_shader_get_version(unsigned int *major, unsigned int *minor);
1509 VKD3D_SHADER_API const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(unsigned int *count);
1525  enum vkd3d_shader_source_type source_type, unsigned int *count);
1526 
1570 VKD3D_SHADER_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
1571  struct vkd3d_shader_code *out, char **messages);
1579 VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages);
1589 VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code);
1590 
1621 VKD3D_SHADER_API int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
1622  struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages);
1633 VKD3D_SHADER_API void vkd3d_shader_free_root_signature(
1634  struct vkd3d_shader_versioned_root_signature_desc *root_signature);
1635 
1660  const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
1661  struct vkd3d_shader_code *dxbc, char **messages);
1683  enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src);
1684 
1709 VKD3D_SHADER_API int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages);
1720  struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
1721 
1746 VKD3D_SHADER_API int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
1747  struct vkd3d_shader_signature *signature, char **messages);
1768  const struct vkd3d_shader_signature *signature, const char *semantic_name,
1769  unsigned int semantic_index, unsigned int stream_index);
1779 VKD3D_SHADER_API void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature);
1780 
1781 /* 1.3 */
1782 
1807 VKD3D_SHADER_API int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info,
1808  struct vkd3d_shader_code *out, char **messages);
1809 
1820 VKD3D_SHADER_API void vkd3d_shader_set_log_callback(PFN_vkd3d_log callback);
1821 
1822 #endif /* VKD3D_SHADER_NO_PROTOTYPES */
1823 
1825 typedef const char *(*PFN_vkd3d_shader_get_version)(unsigned int *major, unsigned int *minor);
1827 typedef const enum vkd3d_shader_source_type *(*PFN_vkd3d_shader_get_supported_source_types)(unsigned int *count);
1829 typedef const enum vkd3d_shader_target_type *(*PFN_vkd3d_shader_get_supported_target_types)(
1830  enum vkd3d_shader_source_type source_type, unsigned int *count);
1831 
1833 typedef int (*PFN_vkd3d_shader_compile)(const struct vkd3d_shader_compile_info *compile_info,
1834  struct vkd3d_shader_code *out, char **messages);
1836 typedef void (*PFN_vkd3d_shader_free_messages)(char *messages);
1839 
1842  struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages);
1845 
1848  const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
1849  struct vkd3d_shader_code *dxbc, char **messages);
1850 
1853  enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src);
1854 
1856 typedef int (*PFN_vkd3d_shader_scan)(const struct vkd3d_shader_compile_info *compile_info, char **messages);
1859  struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
1860 
1863  struct vkd3d_shader_signature *signature, char **messages);
1865 typedef struct vkd3d_shader_signature_element * (*PFN_vkd3d_shader_find_signature_element)(
1866  const struct vkd3d_shader_signature *signature, const char *semantic_name,
1867  unsigned int semantic_index, unsigned int stream_index);
1870 
1872 typedef void (*PFN_vkd3d_shader_preprocess)(struct vkd3d_shader_compile_info *compile_info,
1873  struct vkd3d_shader_code *out, char **messages);
1874 
1876 typedef void (*PFN_vkd3d_shader_set_log_callback)(PFN_vkd3d_log callback);
1877 
1878 #ifdef __cplusplus
1879 }
1880 #endif /* __cplusplus */
1881 
1882 #endif /* __VKD3D_SHADER_H */
A generic structure containing a GPU shader, in text or byte-code format.
Definition: vkd3d_shader.h:174
const void * code
Pointer to the code.
Definition: vkd3d_shader.h:182
size_t size
Size of code, in bytes.
Definition: vkd3d_shader.h:184
Describes the mapping of a Direct3D resource-sampler pair to a combined sampler (i....
Definition: vkd3d_shader.h:337
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:358
unsigned int resource_index
Register index of the Direct3D resource.
Definition: vkd3d_shader.h:344
unsigned int sampler_index
Register index of the Direct3D sampler.
Definition: vkd3d_shader.h:351
unsigned int sampler_space
Register space of the Direct3D sampler.
Definition: vkd3d_shader.h:349
unsigned int resource_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:342
unsigned int flags
A combination of zero or more elements of vkd3d_shader_binding_flag.
Definition: vkd3d_shader.h:355
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:353
A chained structure containing compilation parameters.
Definition: vkd3d_shader.h:641
const struct vkd3d_shader_compile_option * options
Pointer to an array of compilation options.
Definition: vkd3d_shader.h:669
struct vkd3d_shader_code source
Input source code or byte code.
Definition: vkd3d_shader.h:652
enum vkd3d_shader_log_level log_level
Minimum severity of messages returned from the shader function.
Definition: vkd3d_shader.h:674
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO.
Definition: vkd3d_shader.h:643
const char * source_name
Name of the initial source file, which may be used in error messages or debug information.
Definition: vkd3d_shader.h:679
unsigned int option_count
Size, in elements, of options.
Definition: vkd3d_shader.h:671
enum vkd3d_shader_source_type source_type
Format of the input code passed in source.
Definition: vkd3d_shader.h:655
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:649
enum vkd3d_shader_target_type target_type
Desired output format.
Definition: vkd3d_shader.h:657
Various settings which may affect shader compilation or scanning, passed as part of struct vkd3d_shad...
Definition: vkd3d_shader.h:140
unsigned int value
A value associated with the option.
Definition: vkd3d_shader.h:147
enum vkd3d_shader_compile_option_name name
Name of the option.
Definition: vkd3d_shader.h:142
A common structure describing the bind point of a descriptor or descriptor array in the target enviro...
Definition: vkd3d_shader.h:219
unsigned int binding
The binding index of the descriptor.
Definition: vkd3d_shader.h:226
unsigned int count
The size of this descriptor array.
Definition: vkd3d_shader.h:232
unsigned int set
The set of the descriptor.
Definition: vkd3d_shader.h:224
Describes a single shader descriptor; returned as part of struct vkd3d_shader_scan_descriptor_info.
Definition: vkd3d_shader.h:1253
enum vkd3d_shader_resource_type resource_type
Resource type, if applicable, including its dimension.
Definition: vkd3d_shader.h:1264
unsigned int register_index
Register index of the descriptor.
Definition: vkd3d_shader.h:1262
enum vkd3d_shader_resource_data_type resource_data_type
Data type contained in the resource (for example, float or integer).
Definition: vkd3d_shader.h:1266
enum vkd3d_shader_descriptor_type type
Type of the descriptor (for example, SRV, CBV, UAV, or sampler).
Definition: vkd3d_shader.h:1255
unsigned int count
Size of this descriptor array, or 1 if a single descriptor.
Definition: vkd3d_shader.h:1276
unsigned int flags
Bitwise combination of zero or more members of vkd3d_shader_descriptor_info_flag.
Definition: vkd3d_shader.h:1271
unsigned int register_space
Register space of the resource, or 0 if the shader does not support multiple register spaces.
Definition: vkd3d_shader.h:1260
A chained structure containing descriptor offsets.
Definition: vkd3d_shader.h:491
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:495
const struct vkd3d_shader_descriptor_offset * uav_counter_offsets
Pointer to an array of offsets into the descriptor arrays referenced by the 'uav_counters' array in s...
Definition: vkd3d_shader.h:554
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO.
Definition: vkd3d_shader.h:493
unsigned int descriptor_table_offset
Byte offset within the push constants of an array of 32-bit descriptor array offsets.
Definition: vkd3d_shader.h:502
unsigned int descriptor_table_count
Size, in elements, of the descriptor table push constant array.
Definition: vkd3d_shader.h:504
const struct vkd3d_shader_descriptor_offset * binding_offsets
Pointer to an array of struct vkd3d_shader_descriptor_offset objects.
Definition: vkd3d_shader.h:547
Definition: vkd3d_shader.h:474
Definition: vkd3d_shader.h:1103
Definition: vkd3d_shader.h:1007
A chained structure containing HLSL compilation parameters.
Definition: vkd3d_shader.h:891
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO.
Definition: vkd3d_shader.h:893
const char * profile
Pointer to a null-terminated string containing the target shader profile.
Definition: vkd3d_shader.h:909
const char * entry_point
Optional pointer to a null-terminated string containing the shader entry point.
Definition: vkd3d_shader.h:903
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:895
A chained structure describing the interface between a compiled shader and the target environment.
Definition: vkd3d_shader.h:424
unsigned int combined_sampler_count
Size, in elements, of combined_samplers.
Definition: vkd3d_shader.h:443
const struct vkd3d_shader_resource_binding * bindings
Pointer to an array of bindings for shader resource descriptors.
Definition: vkd3d_shader.h:431
const struct vkd3d_shader_push_constant_buffer * push_constant_buffers
Pointer to an array of bindings for push constant buffers.
Definition: vkd3d_shader.h:436
const struct vkd3d_shader_uav_counter_binding * uav_counters
Pointer to an array of bindings for UAV counters.
Definition: vkd3d_shader.h:446
unsigned int binding_count
Size, in elements, of bindings.
Definition: vkd3d_shader.h:433
unsigned int push_constant_buffer_count
Size, in elements, of push_constant_buffers.
Definition: vkd3d_shader.h:438
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:428
const struct vkd3d_shader_combined_resource_sampler * combined_samplers
Pointer to an array of bindings for combined samplers.
Definition: vkd3d_shader.h:441
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO.
Definition: vkd3d_shader.h:426
unsigned int uav_counter_count
Size, in elements, of uav_counters.
Definition: vkd3d_shader.h:448
A single preprocessor macro, passed as part of struct vkd3d_shader_preprocess_info.
Definition: vkd3d_shader.h:759
const char * name
Pointer to a null-terminated string containing the name of a macro.
Definition: vkd3d_shader.h:765
const char * value
Optional pointer to a null-terminated string containing the expansion of the macro.
Definition: vkd3d_shader.h:771
Definition: vkd3d_shader.h:269
Definition: vkd3d_shader.h:282
A chained structure containing preprocessing parameters.
Definition: vkd3d_shader.h:831
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO.
Definition: vkd3d_shader.h:833
const struct vkd3d_shader_macro * macros
Pointer to an array of predefined macros.
Definition: vkd3d_shader.h:845
void * include_context
User-defined pointer which will be passed unmodified to the pfn_open_include and pfn_close_include ca...
Definition: vkd3d_shader.h:876
unsigned int macro_count
Size, in elements, of macros.
Definition: vkd3d_shader.h:847
PFN_vkd3d_shader_open_include pfn_open_include
Optional pointer to a callback function, which will be called in order to evaluate #include directive...
Definition: vkd3d_shader.h:861
PFN_vkd3d_shader_close_include pfn_close_include
Optional pointer to a callback function, which will be called whenever an included file is closed.
Definition: vkd3d_shader.h:871
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:835
Describes the mapping of a Direct3D constant buffer to a range of push constants in the target enviro...
Definition: vkd3d_shader.h:390
unsigned int register_index
Register index of the Direct3D resource.
Definition: vkd3d_shader.h:397
unsigned int size
Size, in bytes, of the target push constants.
Definition: vkd3d_shader.h:404
unsigned int register_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:395
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:399
unsigned int offset
Offset, in bytes, of the target push constants.
Definition: vkd3d_shader.h:402
Describes the mapping of a single resource or resource array to its binding point in the target envir...
Definition: vkd3d_shader.h:309
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:325
unsigned int register_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:316
enum vkd3d_shader_descriptor_type type
The type of this descriptor.
Definition: vkd3d_shader.h:311
unsigned int flags
A combination of zero or more elements of vkd3d_shader_binding_flag.
Definition: vkd3d_shader.h:322
unsigned int register_index
Register index of the DXBC resource.
Definition: vkd3d_shader.h:318
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:320
Definition: vkd3d_shader.h:1022
Definition: vkd3d_shader.h:1119
Definition: vkd3d_shader.h:1113
Definition: vkd3d_shader.h:1016
Definition: vkd3d_shader.h:1029
Definition: vkd3d_shader.h:1126
Definition: vkd3d_shader.h:1046
Definition: vkd3d_shader.h:1138
Definition: vkd3d_shader.h:1072
A chained structure enumerating the descriptors declared by a shader.
Definition: vkd3d_shader.h:1285
enum vkd3d_shader_structure_type type
Input; must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO.
Definition: vkd3d_shader.h:1289
const void * next
Input; optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1291
unsigned int descriptor_count
Output; size, in elements, of descriptors.
Definition: vkd3d_shader.h:1296
struct vkd3d_shader_descriptor_info * descriptors
Output; returns a pointer to an array of descriptors.
Definition: vkd3d_shader.h:1294
A single shader varying, returned as part of struct vkd3d_shader_signature.
Definition: vkd3d_shader.h:1379
unsigned int semantic_index
Semantic index, or 0 if the semantic is not indexed.
Definition: vkd3d_shader.h:1383
enum vkd3d_shader_sysval_semantic sysval_semantic
System value semantic.
Definition: vkd3d_shader.h:1393
unsigned int stream_index
Stream index of a geometry shader output semantic.
Definition: vkd3d_shader.h:1388
unsigned int used_mask
Subset of mask which the shader reads from or writes to.
Definition: vkd3d_shader.h:1406
enum vkd3d_shader_component_type component_type
Data type.
Definition: vkd3d_shader.h:1395
enum vkd3d_shader_minimum_precision min_precision
Minimum interpolation precision.
Definition: vkd3d_shader.h:1408
unsigned int register_index
Register index.
Definition: vkd3d_shader.h:1397
unsigned int mask
Mask of the register components allocated to this varying.
Definition: vkd3d_shader.h:1399
const char * semantic_name
Semantic name.
Definition: vkd3d_shader.h:1381
Description of a shader input or output signature.
Definition: vkd3d_shader.h:1419
struct vkd3d_shader_signature_element * elements
Pointer to an array of varyings.
Definition: vkd3d_shader.h:1421
unsigned int element_count
Size, in elements, of elements.
Definition: vkd3d_shader.h:1423
Definition: vkd3d_shader.h:746
Definition: vkd3d_shader.h:705
Definition: vkd3d_shader.h:990
Definition: vkd3d_shader.h:452
Definition: vkd3d_shader.h:463
Describes the mapping of a single Direct3D UAV counter.
Definition: vkd3d_shader.h:367
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the UAV counter is visible.
Definition: vkd3d_shader.h:376
unsigned int register_space
Register space of the Direct3D UAV descriptor.
Definition: vkd3d_shader.h:372
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:379
unsigned int register_index
Register index of the Direct3D UAV descriptor.
Definition: vkd3d_shader.h:374
Definition: vkd3d_shader.h:1155
VKD3D_SHADER_API enum vkd3d_shader_target_type * vkd3d_shader_get_supported_target_types(enum vkd3d_shader_source_type source_type, unsigned int *count)
Returns the target types supported, with the given source type, by vkd3d_shader_compile().
VKD3D_SHADER_API struct vkd3d_shader_signature_element * vkd3d_shader_find_signature_element(const struct vkd3d_shader_signature *signature, const char *semantic_name, unsigned int semantic_index, unsigned int stream_index)
Find a single element of a parsed input signature.
vkd3d_shader_compile_option_name
Definition: vkd3d_shader.h:115
@ VKD3D_SHADER_COMPILE_OPTION_API_VERSION
value is a member of enum vkd3d_shader_api_version.
Definition: vkd3d_shader.h:129
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV
value is a member of enum vkd3d_shader_compile_option_buffer_uav.
Definition: vkd3d_shader.h:125
@ VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG
If value is nonzero, do not include debug information in the compiled shader.
Definition: vkd3d_shader.h:123
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING
value is a member of enum vkd3d_shader_compile_option_formatting_flags.
Definition: vkd3d_shader.h:127
static uint32_t vkd3d_shader_create_swizzle(enum vkd3d_shader_swizzle_component x, enum vkd3d_shader_swizzle_component y, enum vkd3d_shader_swizzle_component z, enum vkd3d_shader_swizzle_component w)
Build a vkd3d-shader swizzle with the given components.
Definition: vkd3d_shader.h:1464
int(* PFN_vkd3d_shader_convert_root_signature)(struct vkd3d_shader_versioned_root_signature_desc *dst, enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src)
Type of vkd3d_shader_convert_root_signature().
Definition: vkd3d_shader.h:1852
vkd3d_shader_resource_data_type
The type of the data contained in a shader resource, returned as part of struct vkd3d_shader_descript...
Definition: vkd3d_shader.h:1204
@ VKD3D_SHADER_RESOURCE_DATA_DOUBLE
IEEE double-precision floating-point.
Definition: vkd3d_shader.h:1218
@ VKD3D_SHADER_RESOURCE_DATA_MIXED
Undefined/type-less.
Definition: vkd3d_shader.h:1216
@ VKD3D_SHADER_RESOURCE_DATA_SNORM
Signed normalized integer.
Definition: vkd3d_shader.h:1208
@ VKD3D_SHADER_RESOURCE_DATA_CONTINUED
Continuation of the previous component.
Definition: vkd3d_shader.h:1224
@ VKD3D_SHADER_RESOURCE_DATA_UINT
Unsigned integer.
Definition: vkd3d_shader.h:1212
@ VKD3D_SHADER_RESOURCE_DATA_FLOAT
IEEE single-precision floating-point.
Definition: vkd3d_shader.h:1214
@ VKD3D_SHADER_RESOURCE_DATA_UNORM
Unsigned normalized integer.
Definition: vkd3d_shader.h:1206
@ VKD3D_SHADER_RESOURCE_DATA_INT
Signed integer.
Definition: vkd3d_shader.h:1210
int(* PFN_vkd3d_shader_open_include)(const char *filename, bool local, const char *parent_data, void *context, struct vkd3d_shader_code *out)
Type of a callback function which will be used to open preprocessor includes.
Definition: vkd3d_shader.h:802
VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code)
Free shader code allocated by another vkd3d-shader function, such as vkd3d_shader_compile().
void(* PFN_vkd3d_shader_close_include)(const struct vkd3d_shader_code *code, void *context)
Type of a callback function which will be used to close preprocessor includes.
Definition: vkd3d_shader.h:817
vkd3d_shader_descriptor_info_flag
Additional flags describing a shader descriptor, returned as part of struct vkd3d_shader_descriptor_i...
Definition: vkd3d_shader.h:1234
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ
The descriptor is a UAV resource, which is read from by the shader.
Definition: vkd3d_shader.h:1241
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER
The descriptor is a UAV resource, whose counter is read from or written to by the shader.
Definition: vkd3d_shader.h:1239
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE
The descriptor is a comparison sampler.
Definition: vkd3d_shader.h:1243
VKD3D_SHADER_API int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_root_signature_desc *root_signature, struct vkd3d_shader_code *dxbc, char **messages)
Convert a structural description of a shader root signature to a byte code format capable of being re...
VKD3D_SHADER_API int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
Read the input signature of a compiled shader, returning a structural description which can be easily...
void(* PFN_vkd3d_shader_free_shader_signature)(struct vkd3d_shader_signature *signature)
Type of vkd3d_shader_free_shader_signature().
Definition: vkd3d_shader.h:1869
int(* PFN_vkd3d_shader_scan)(const struct vkd3d_shader_compile_info *compile_info, char **messages)
Type of vkd3d_shader_scan().
Definition: vkd3d_shader.h:1856
VKD3D_SHADER_API int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages)
Convert a byte code description of a shader root signature to a structural description which can be e...
void(* PFN_vkd3d_shader_free_root_signature)(struct vkd3d_shader_versioned_root_signature_desc *root_signature)
Type of vkd3d_shader_free_root_signature().
Definition: vkd3d_shader.h:1844
vkd3d_shader_sysval_semantic
System value semantic, returned as part of struct vkd3d_shader_signature.
Definition: vkd3d_shader.h:1323
@ VKD3D_SHADER_SV_VERTEX_ID
Vertex ID; SV_VertexID in Direct3D.
Definition: vkd3d_shader.h:1337
@ VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX
Render target layer; SV_RenderTargetArrayIndex in Direct3D.
Definition: vkd3d_shader.h:1333
@ VKD3D_SHADER_SV_PRIMITIVE_ID
Primtive ID; SV_PrimitiveID in Direct3D.
Definition: vkd3d_shader.h:1339
@ VKD3D_SHADER_SV_CULL_DISTANCE
Cull distance; SV_CullDistance in Direct3D.
Definition: vkd3d_shader.h:1331
@ VKD3D_SHADER_SV_NONE
No system value.
Definition: vkd3d_shader.h:1325
@ VKD3D_SHADER_SV_IS_FRONT_FACE
Whether the triangle is front-facing; SV_IsFrontFace in Direct3D.
Definition: vkd3d_shader.h:1343
@ VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX
Viewport index; SV_ViewportArrayIndex in Direct3D.
Definition: vkd3d_shader.h:1335
@ VKD3D_SHADER_SV_INSTANCE_ID
Instance ID; SV_InstanceID in Direct3D.
Definition: vkd3d_shader.h:1341
@ VKD3D_SHADER_SV_CLIP_DISTANCE
Clip distance; SV_ClipDistance in Direct3D.
Definition: vkd3d_shader.h:1329
@ VKD3D_SHADER_SV_SAMPLE_INDEX
Sample index; SV_SampleIndex in Direct3D.
Definition: vkd3d_shader.h:1345
@ VKD3D_SHADER_SV_POSITION
Vertex position; SV_Position in Direct3D.
Definition: vkd3d_shader.h:1327
vkd3d_shader_source_type
The format of a shader to be compiled or scanned.
Definition: vkd3d_shader.h:559
@ VKD3D_SHADER_SOURCE_D3D_BYTECODE
Legacy Direct3D byte-code.
Definition: vkd3d_shader.h:576
@ VKD3D_SHADER_SOURCE_HLSL
High-Level Shader Language source code.
Definition: vkd3d_shader.h:571
@ VKD3D_SHADER_SOURCE_DXBC_TPF
A 'Tokenized Program Format' shader embedded in a DXBC container.
Definition: vkd3d_shader.h:569
@ VKD3D_SHADER_SOURCE_NONE
The shader has no type or is to be ignored.
Definition: vkd3d_shader.h:564
VKD3D_SHADER_API void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)
Free a structural representation of a shader input signature allocated by vkd3d_shader_parse_input_si...
vkd3d_shader_log_level
Describes the minimum severity of compilation messages returned by vkd3d_shader_compile() and similar...
Definition: vkd3d_shader.h:622
@ VKD3D_SHADER_LOG_NONE
No messages will be returned.
Definition: vkd3d_shader.h:624
@ VKD3D_SHADER_LOG_ERROR
Only fatal errors which prevent successful compilation will be returned.
Definition: vkd3d_shader.h:626
@ VKD3D_SHADER_LOG_WARNING
Non-fatal warnings and fatal errors will be returned.
Definition: vkd3d_shader.h:628
@ VKD3D_SHADER_LOG_INFO
All messages, including general informational messages, will be returned.
Definition: vkd3d_shader.h:632
VKD3D_SHADER_API int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages)
Parse shader source code or byte code, returning various types of requested information.
vkd3d_shader_structure_type
The type of a chained structure.
Definition: vkd3d_shader.h:53
@ VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO
The structure is a vkd3d_shader_transform_feedback_info structure.
Definition: vkd3d_shader.h:65
@ VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO
The structure is a vkd3d_shader_compile_info structure.
Definition: vkd3d_shader.h:55
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO
The structure is a vkd3d_shader_scan_descriptor_info structure.
Definition: vkd3d_shader.h:59
@ VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_DOMAIN_SHADER_TARGET_INFO
The structure is a vkd3d_shader_spirv_domain_shader_target_info structure.
Definition: vkd3d_shader.h:61
@ VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO
The structure is a vkd3d_shader_descriptor_offset_info structure.
Definition: vkd3d_shader.h:81
@ VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO
The structure is a vkd3d_shader_preprocess_info structure.
Definition: vkd3d_shader.h:76
@ VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO
The structure is a vkd3d_shader_interface_info structure.
Definition: vkd3d_shader.h:57
@ VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO
The structure is a vkd3d_shader_spirv_target_info structure.
Definition: vkd3d_shader.h:63
@ VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO
The structure is a vkd3d_shader_hlsl_source_info structure.
Definition: vkd3d_shader.h:71
vkd3d_shader_visibility
Describes which shader stages a resource is visible to.
Definition: vkd3d_shader.h:152
@ VKD3D_SHADER_VISIBILITY_DOMAIN
The resource is visible only to the domain shader.
Definition: vkd3d_shader.h:160
@ VKD3D_SHADER_VISIBILITY_COMPUTE
The resource is visible only to the compute shader.
Definition: vkd3d_shader.h:167
@ VKD3D_SHADER_VISIBILITY_PIXEL
The resource is visible only to the pixel shader.
Definition: vkd3d_shader.h:164
@ VKD3D_SHADER_VISIBILITY_ALL
The resource is visible to all shader stages.
Definition: vkd3d_shader.h:154
@ VKD3D_SHADER_VISIBILITY_GEOMETRY
The resource is visible only to the geometry shader.
Definition: vkd3d_shader.h:162
@ VKD3D_SHADER_VISIBILITY_VERTEX
The resource is visible only to the vertex shader.
Definition: vkd3d_shader.h:156
@ VKD3D_SHADER_VISIBILITY_HULL
The resource is visible only to the hull shader.
Definition: vkd3d_shader.h:158
vkd3d_shader_spirv_extension
Definition: vkd3d_shader.h:692
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_STENCIL_EXPORT
Definition: vkd3d_shader.h:698
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_DESCRIPTOR_INDEXING
Definition: vkd3d_shader.h:696
vkd3d_shader_api_version
Definition: vkd3d_shader.h:43
vkd3d_shader_component_type
Data type of a shader varying, returned as part of struct vkd3d_shader_signature_element.
Definition: vkd3d_shader.h:1304
@ VKD3D_SHADER_COMPONENT_INT
32-bit signed integer.
Definition: vkd3d_shader.h:1310
@ VKD3D_SHADER_COMPONENT_UINT
32-bit unsigned integer.
Definition: vkd3d_shader.h:1308
@ VKD3D_SHADER_COMPONENT_DOUBLE
64-bit IEEE floating-point.
Definition: vkd3d_shader.h:1316
@ VKD3D_SHADER_COMPONENT_FLOAT
32-bit IEEE floating-point.
Definition: vkd3d_shader.h:1312
@ VKD3D_SHADER_COMPONENT_VOID
The varying has no type.
Definition: vkd3d_shader.h:1306
@ VKD3D_SHADER_COMPONENT_BOOL
Boolean.
Definition: vkd3d_shader.h:1314
vkd3d_shader_descriptor_type
The type of a shader resource descriptor.
Definition: vkd3d_shader.h:189
@ VKD3D_SHADER_DESCRIPTOR_TYPE_UAV
The descriptor is an unordered access view.
Definition: vkd3d_shader.h:199
@ VKD3D_SHADER_DESCRIPTOR_TYPE_CBV
The descriptor is a constant buffer view.
Definition: vkd3d_shader.h:204
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER
The descriptor is a sampler.
Definition: vkd3d_shader.h:209
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SRV
The descriptor is a shader resource view.
Definition: vkd3d_shader.h:194
#define VKD3D_SHADER_SWIZZLE_MASK
A mask selecting one component from a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:1441
vkd3d_shader_resource_type
The type of a shader resource, returned as part of struct vkd3d_shader_descriptor_info.
Definition: vkd3d_shader.h:1169
@ VKD3D_SHADER_RESOURCE_NONE
The type is invalid or not applicable for this descriptor.
Definition: vkd3d_shader.h:1174
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY
2-dimensional array texture.
Definition: vkd3d_shader.h:1190
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMS
Multisampled 2-dimensional texture.
Definition: vkd3d_shader.h:1182
@ VKD3D_SHADER_RESOURCE_TEXTURE_3D
3-dimensional texture.
Definition: vkd3d_shader.h:1184
@ VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY
1-dimensional array texture.
Definition: vkd3d_shader.h:1188
@ VKD3D_SHADER_RESOURCE_BUFFER
Dimensionless buffer.
Definition: vkd3d_shader.h:1176
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBE
Cubemap texture.
Definition: vkd3d_shader.h:1186
@ VKD3D_SHADER_RESOURCE_TEXTURE_1D
1-dimensional texture.
Definition: vkd3d_shader.h:1178
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY
Cubemap array texture.
Definition: vkd3d_shader.h:1194
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY
Multisampled 2-dimensional array texture.
Definition: vkd3d_shader.h:1192
@ VKD3D_SHADER_RESOURCE_TEXTURE_2D
2-dimensional texture.
Definition: vkd3d_shader.h:1180
VKD3D_SHADER_API const char * vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
Returns the current version of this library.
VKD3D_SHADER_API void vkd3d_shader_set_log_callback(PFN_vkd3d_log callback)
Set a callback to be called when vkd3d-shader outputs debug logging.
int(* PFN_vkd3d_shader_parse_root_signature)(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages)
Type of vkd3d_shader_parse_root_signature().
Definition: vkd3d_shader.h:1841
int(* PFN_vkd3d_shader_serialize_root_signature)(const struct vkd3d_shader_versioned_root_signature_desc *root_signature, struct vkd3d_shader_code *dxbc, char **messages)
Type of vkd3d_shader_serialize_root_signature().
Definition: vkd3d_shader.h:1847
VKD3D_SHADER_API enum vkd3d_shader_source_type * vkd3d_shader_get_supported_source_types(unsigned int *count)
Returns the source types supported, with any target type, by vkd3d_shader_compile().
vkd3d_shader_swizzle_component
Possible values for a single component of a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:1428
VKD3D_SHADER_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
Transform a form of GPU shader source code or byte code into another form of source code or byte code...
VKD3D_SHADER_API int vkd3d_shader_convert_root_signature(struct vkd3d_shader_versioned_root_signature_desc *dst, enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src)
Convert a structural representation of a root signature to a different version of structural represen...
int(* PFN_vkd3d_shader_compile)(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
Type of vkd3d_shader_compile().
Definition: vkd3d_shader.h:1833
void(* PFN_vkd3d_shader_free_scan_descriptor_info)(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
Type of vkd3d_shader_free_scan_descriptor_info().
Definition: vkd3d_shader.h:1858
VKD3D_SHADER_API int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
Preprocess the given source code.
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx)
The offset, in bits, of the nth parameter of a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:1443
void(* PFN_vkd3d_shader_free_messages)(char *messages)
Type of vkd3d_shader_free_messages().
Definition: vkd3d_shader.h:1836
vkd3d_shader_minimum_precision
Minimum interpolation precision of a shader varying, returned as part of struct vkd3d_shader_signatur...
Definition: vkd3d_shader.h:1361
@ VKD3D_SHADER_MINIMUM_PRECISION_UINT_16
16-bit unsigned integer.
Definition: vkd3d_shader.h:1370
@ VKD3D_SHADER_MINIMUM_PRECISION_FIXED_8_2
10-bit fixed point (2 integer and 8 fractional bits).
Definition: vkd3d_shader.h:1366
@ VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16
16-bit floating-point.
Definition: vkd3d_shader.h:1364
@ VKD3D_SHADER_MINIMUM_PRECISION_INT_16
16-bit signed integer.
Definition: vkd3d_shader.h:1368
int(* PFN_vkd3d_shader_parse_input_signature)(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
Type of vkd3d_shader_parse_input_signature().
Definition: vkd3d_shader.h:1862
VKD3D_SHADER_API void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
Free members of struct vkd3d_shader_scan_descriptor_info() allocated by vkd3d_shader_scan().
void(* PFN_vkd3d_shader_preprocess)(struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
Type of vkd3d_shader_preprocess().
Definition: vkd3d_shader.h:1872
vkd3d_shader_target_type
The output format of a compiled shader.
Definition: vkd3d_shader.h:583
@ VKD3D_SHADER_TARGET_SPIRV_BINARY
A SPIR-V shader in binary form.
Definition: vkd3d_shader.h:593
@ VKD3D_SHADER_TARGET_D3D_ASM
Direct3D shader assembly.
Definition: vkd3d_shader.h:598
@ VKD3D_SHADER_TARGET_NONE
The shader has no type or is to be ignored.
Definition: vkd3d_shader.h:588
@ VKD3D_SHADER_TARGET_DXBC_TPF
A 'Tokenized Program Format' shader embedded in a DXBC container.
Definition: vkd3d_shader.h:608
@ VKD3D_SHADER_TARGET_GLSL
An 'OpenGL Shading Language' shader.
Definition: vkd3d_shader.h:612
@ VKD3D_SHADER_TARGET_D3D_BYTECODE
Legacy Direct3D byte-code.
Definition: vkd3d_shader.h:603
void(* PFN_vkd3d_shader_free_shader_code)(struct vkd3d_shader_code *code)
Type of vkd3d_shader_free_shader_code().
Definition: vkd3d_shader.h:1838
void(* PFN_vkd3d_shader_set_log_callback)(PFN_vkd3d_log callback)
Type of vkd3d_shader_set_log_callback().
Definition: vkd3d_shader.h:1876
VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages)
Free shader messages allocated by another vkd3d-shader function, such as vkd3d_shader_compile().
VKD3D_SHADER_API void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *root_signature)
Free a structural representation of a shader root signature allocated by vkd3d_shader_convert_root_si...
vkd3d_shader_compile_option_buffer_uav
Determines how buffer UAVs are stored.
Definition: vkd3d_shader.h:93
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER
Use buffer textures for buffer UAVs.
Definition: vkd3d_shader.h:95
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_BUFFER
Use storage buffers for buffer UAVs.
Definition: vkd3d_shader.h:97
This file contains definitions for basic types used by vkd3d libraries.