vkd3d  1.18
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 <stddef.h>
25 #include <vkd3d_types.h>
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* __cplusplus */
30 
44 {
45  VKD3D_SHADER_API_VERSION_1_0,
46  VKD3D_SHADER_API_VERSION_1_1,
47  VKD3D_SHADER_API_VERSION_1_2,
48  VKD3D_SHADER_API_VERSION_1_3,
49  VKD3D_SHADER_API_VERSION_1_4,
50  VKD3D_SHADER_API_VERSION_1_5,
51  VKD3D_SHADER_API_VERSION_1_6,
52  VKD3D_SHADER_API_VERSION_1_7,
53  VKD3D_SHADER_API_VERSION_1_8,
54  VKD3D_SHADER_API_VERSION_1_9,
55  VKD3D_SHADER_API_VERSION_1_10,
56  VKD3D_SHADER_API_VERSION_1_11,
57  VKD3D_SHADER_API_VERSION_1_12,
58  VKD3D_SHADER_API_VERSION_1_13,
59  VKD3D_SHADER_API_VERSION_1_14,
60  VKD3D_SHADER_API_VERSION_1_15,
61  VKD3D_SHADER_API_VERSION_1_16,
62  VKD3D_SHADER_API_VERSION_1_17,
63  VKD3D_SHADER_API_VERSION_1_18,
64 
65  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION),
66 };
67 
70 {
83 
134 
135  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STRUCTURE_TYPE),
136 };
137 
145 {
150 
151  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV),
152 };
153 
159 {
167 
168  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV),
169 };
170 
172 {
173  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_NONE = 0x00000000,
174  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR = 0x00000001,
175  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT = 0x00000002,
176  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS = 0x00000004,
177  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER = 0x00000008,
178  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS = 0x00000010,
185 
186  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_FORMATTING_FLAGS),
187 };
188 
191 {
192  VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ROW_MAJOR = 0x00000001,
193  VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_COLUMN_MAJOR = 0x00000002,
194 
195  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER),
196 };
197 
200 {
224 
226 };
227 
234 {
241 
243 };
244 
247 {
269 
270  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLAGS),
271 };
272 
279 {
283 
284  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARSE_DXBC_FLAGS),
285 };
286 
288 {
384 
385  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_NAME),
386 };
387 
394 {
401  unsigned int value;
402 };
403 
406 {
419 
422 
423  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_VISIBILITY),
424 };
425 
428 {
443  const void *code;
445  size_t size;
446 };
447 
450 {
471 
472  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_TYPE),
473 };
474 
480 {
485  unsigned int set;
487  unsigned int binding;
493  unsigned int count;
494 };
495 
496 enum vkd3d_shader_binding_flag
497 {
498  VKD3D_SHADER_BINDING_FLAG_BUFFER = 0x00000001,
499  VKD3D_SHADER_BINDING_FLAG_IMAGE = 0x00000002,
500 
501  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_BINDING_FLAG),
502 };
503 
521 {
568 
569  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_FOG_FRAGMENT_MODE),
570 };
571 
583 {
607 
608  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_FOG_SOURCE),
609 };
610 
616 {
617  VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN,
632 
633  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_TYPE),
634 };
635 
641 {
642  VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN,
654 
655  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_DATA_TYPE),
656 };
657 
663 {
664  VKD3D_SHADER_PARAMETER_NAME_UNKNOWN,
782  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_1,
783  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_2,
784  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_3,
785  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_4,
786  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_5,
787  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_6,
788  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_7,
989  VKD3D_SHADER_PARAMETER_NAME_BUMP_MATRIX_1,
990  VKD3D_SHADER_PARAMETER_NAME_BUMP_MATRIX_2,
991  VKD3D_SHADER_PARAMETER_NAME_BUMP_MATRIX_3,
992  VKD3D_SHADER_PARAMETER_NAME_BUMP_MATRIX_4,
993  VKD3D_SHADER_PARAMETER_NAME_BUMP_MATRIX_5,
1013  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_SCALE_1,
1014  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_SCALE_2,
1015  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_SCALE_3,
1016  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_SCALE_4,
1017  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_SCALE_5,
1037  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_OFFSET_1,
1038  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_OFFSET_2,
1039  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_OFFSET_3,
1040  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_OFFSET_4,
1041  VKD3D_SHADER_PARAMETER_NAME_BUMP_LUMINANCE_OFFSET_5,
1042 
1043  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_NAME),
1044 };
1045 
1051 {
1052  union
1053  {
1058  uint32_t u32;
1065  float f32;
1066  } u;
1067 };
1068 
1076 {
1077  union
1078  {
1083  uint32_t u32;
1088  float f32;
1095  float f32_vec4[4];
1096  void *_pointer_pad;
1097  uint32_t _pad[4];
1098  } u;
1099 };
1100 
1106 {
1114  uint32_t id;
1115 };
1116 
1122 {
1127  unsigned int set;
1129  unsigned int binding;
1131  uint32_t offset;
1132 };
1133 
1147 {
1148  enum vkd3d_shader_parameter_name name;
1149  enum vkd3d_shader_parameter_type type;
1150  enum vkd3d_shader_parameter_data_type data_type;
1151  union
1152  {
1153  struct vkd3d_shader_parameter_immediate_constant immediate_constant;
1154  struct vkd3d_shader_parameter_specialization_constant specialization_constant;
1155  } u;
1156 };
1157 
1176 {
1186  union
1187  {
1203  void *_pointer_pad;
1204  uint32_t _pad[4];
1205  } u;
1206 };
1207 
1218 {
1225 
1226  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_D3DBC_CONSTANT_REGISTER),
1227 };
1228 
1245 {
1252  unsigned int register_space;
1261  unsigned int register_index;
1265  unsigned int flags;
1266 
1269 };
1270 
1271 #define VKD3D_SHADER_DUMMY_SAMPLER_INDEX ~0u
1272 
1280 {
1285  unsigned int resource_space;
1287  unsigned int resource_index;
1292  unsigned int sampler_space;
1294  unsigned int sampler_index;
1298  unsigned int flags;
1299 
1302 };
1303 
1310 {
1315  unsigned int register_space;
1317  unsigned int register_index;
1320 
1323  unsigned int offset;
1324 };
1325 
1333 {
1338  unsigned int register_space;
1340  unsigned int register_index;
1343 
1345  unsigned int offset;
1347  unsigned int size;
1348 };
1349 
1367 {
1371  const void *next;
1372 
1376  unsigned int binding_count;
1377 
1382 
1387 
1391  unsigned int uav_counter_count;
1392 };
1393 
1395 {
1396  unsigned int stream_index;
1397  const char *semantic_name;
1398  unsigned int semantic_index;
1399  uint8_t component_index;
1400  uint8_t component_count;
1401  uint8_t output_slot;
1402 };
1403 
1404 /* Extends vkd3d_shader_interface_info. */
1406 {
1407  enum vkd3d_shader_structure_type type;
1408  const void *next;
1409 
1410  const struct vkd3d_shader_transform_feedback_element *elements;
1411  unsigned int element_count;
1412  const unsigned int *buffer_strides;
1413  unsigned int buffer_stride_count;
1414 };
1415 
1417 {
1418  unsigned int static_offset;
1419  unsigned int dynamic_offset_index;
1420 };
1421 
1434 {
1438  const void *next;
1439 
1448 
1491 
1498 };
1499 
1502 {
1535 
1536  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SOURCE_TYPE),
1537 };
1538 
1541 {
1552  VKD3D_SHADER_TARGET_SPIRV_TEXT,
1580 
1581  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TARGET_TYPE),
1582 };
1583 
1589 {
1600 
1601  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_LOG_LEVEL),
1602 };
1603 
1608 {
1616  const void *next;
1617 
1620 
1625 
1638  unsigned int option_count;
1639 
1646  const char *source_name;
1647 };
1648 
1650 {
1651  VKD3D_SHADER_SPIRV_ENVIRONMENT_NONE,
1652  VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5,
1653  VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0, /* default target */
1656 
1657  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SPIRV_ENVIRONMENT),
1658 };
1659 
1661 {
1662  VKD3D_SHADER_SPIRV_EXTENSION_NONE,
1663  VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION,
1672 
1673  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SPIRV_EXTENSION),
1674 };
1675 
1676 /* Extends vkd3d_shader_compile_info. */
1678 {
1679  enum vkd3d_shader_structure_type type;
1680  const void *next;
1681 
1682  const char *entry_point; /* "main" if NULL. */
1683 
1684  enum vkd3d_shader_spirv_environment environment;
1685 
1686  const enum vkd3d_shader_spirv_extension *extensions;
1687  unsigned int extension_count;
1688 
1689  const struct vkd3d_shader_parameter *parameters;
1690  unsigned int parameter_count;
1691 
1692  bool dual_source_blending;
1693  const unsigned int *output_swizzles;
1694  unsigned int output_swizzle_count;
1695 };
1696 
1697 enum vkd3d_shader_tessellator_output_primitive
1698 {
1699  VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT = 0x1,
1700  VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE = 0x2,
1701  VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW = 0x3,
1702  VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 0x4,
1703 
1704  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_OUTPUT_PRIMITIVE),
1705 };
1706 
1707 enum vkd3d_shader_tessellator_partitioning
1708 {
1709  VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER = 0x1,
1710  VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2 = 0x2,
1711  VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 0x3,
1712  VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 0x4,
1713 
1714  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_PARTITIONING),
1715 };
1716 
1717 /* Extends vkd3d_shader_spirv_target_info. */
1719 {
1720  enum vkd3d_shader_structure_type type;
1721  const void *next;
1722 
1723  enum vkd3d_shader_tessellator_output_primitive output_primitive;
1724  enum vkd3d_shader_tessellator_partitioning partitioning;
1725 };
1726 
1732 {
1738  const char *name;
1744  const char *value;
1745 };
1746 
1775 typedef int (*PFN_vkd3d_shader_open_include)(const char *filename, bool local,
1776  const char *parent_data, void *context, struct vkd3d_shader_code *out);
1791 typedef void (*PFN_vkd3d_shader_close_include)(const struct vkd3d_shader_code *code, void *context);
1792 
1805 {
1809  const void *next;
1810 
1821  unsigned int macro_count;
1822 
1851 };
1852 
1865 {
1869  const void *next;
1870 
1877  const char *entry_point;
1878  struct vkd3d_shader_code secondary_code;
1883  const char *profile;
1884 };
1885 
1886 /* root signature 1.0 */
1887 enum vkd3d_shader_filter
1888 {
1889  VKD3D_SHADER_FILTER_MIN_MAG_MIP_POINT = 0x000,
1890  VKD3D_SHADER_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x001,
1891  VKD3D_SHADER_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x004,
1892  VKD3D_SHADER_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x005,
1893  VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x010,
1894  VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x011,
1895  VKD3D_SHADER_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x014,
1896  VKD3D_SHADER_FILTER_MIN_MAG_MIP_LINEAR = 0x015,
1897  VKD3D_SHADER_FILTER_ANISOTROPIC = 0x055,
1898  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x080,
1899  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x081,
1900  VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x084,
1901  VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x085,
1902  VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x090,
1903  VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x091,
1904  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x094,
1905  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x095,
1906  VKD3D_SHADER_FILTER_COMPARISON_ANISOTROPIC = 0x0d5,
1907  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
1908  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
1909  VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
1910  VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
1911  VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
1912  VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
1913  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
1914  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
1915  VKD3D_SHADER_FILTER_MINIMUM_ANISOTROPIC = 0x155,
1916  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
1917  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
1918  VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
1919  VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
1920  VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
1921  VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
1922  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
1923  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
1924  VKD3D_SHADER_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,
1925 
1926  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_FILTER),
1927 };
1928 
1929 enum vkd3d_shader_texture_address_mode
1930 {
1931  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_WRAP = 0x1,
1932  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR = 0x2,
1933  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_CLAMP = 0x3,
1934  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_BORDER = 0x4,
1935  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 0x5,
1936 
1937  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TEXTURE_ADDRESS_MODE),
1938 };
1939 
1940 enum vkd3d_shader_comparison_func
1941 {
1942  VKD3D_SHADER_COMPARISON_FUNC_NEVER = 0x1,
1943  VKD3D_SHADER_COMPARISON_FUNC_LESS = 0x2,
1944  VKD3D_SHADER_COMPARISON_FUNC_EQUAL = 0x3,
1945  VKD3D_SHADER_COMPARISON_FUNC_LESS_EQUAL = 0x4,
1946  VKD3D_SHADER_COMPARISON_FUNC_GREATER = 0x5,
1947  VKD3D_SHADER_COMPARISON_FUNC_NOT_EQUAL = 0x6,
1948  VKD3D_SHADER_COMPARISON_FUNC_GREATER_EQUAL = 0x7,
1949  VKD3D_SHADER_COMPARISON_FUNC_ALWAYS = 0x8,
1950 
1951  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPARISON_FUNC),
1952 };
1953 
1954 enum vkd3d_shader_static_border_colour
1955 {
1956  VKD3D_SHADER_STATIC_BORDER_COLOUR_TRANSPARENT_BLACK = 0x0,
1957  VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_BLACK = 0x1,
1958  VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_WHITE = 0x2,
1959 
1960  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STATIC_BORDER_COLOUR),
1961 };
1962 
1964 {
1965  enum vkd3d_shader_filter filter;
1966  enum vkd3d_shader_texture_address_mode address_u;
1967  enum vkd3d_shader_texture_address_mode address_v;
1968  enum vkd3d_shader_texture_address_mode address_w;
1969  float mip_lod_bias;
1970  unsigned int max_anisotropy;
1971  enum vkd3d_shader_comparison_func comparison_func;
1972  enum vkd3d_shader_static_border_colour border_colour;
1973  float min_lod;
1974  float max_lod;
1975  unsigned int shader_register;
1976  unsigned int register_space;
1977  enum vkd3d_shader_visibility shader_visibility;
1978 };
1979 
1981 {
1982  enum vkd3d_shader_descriptor_type range_type;
1983  unsigned int descriptor_count;
1984  unsigned int base_shader_register;
1985  unsigned int register_space;
1986  unsigned int descriptor_table_offset;
1987 };
1988 
1990 {
1991  unsigned int descriptor_range_count;
1992  const struct vkd3d_shader_descriptor_range *descriptor_ranges;
1993 };
1994 
1996 {
1997  unsigned int shader_register;
1998  unsigned int register_space;
1999  unsigned int value_count;
2000 };
2001 
2003 {
2004  unsigned int shader_register;
2005  unsigned int register_space;
2006 };
2007 
2008 enum vkd3d_shader_root_parameter_type
2009 {
2010  VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0x0,
2011  VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 0x1,
2012  VKD3D_SHADER_ROOT_PARAMETER_TYPE_CBV = 0x2,
2013  VKD3D_SHADER_ROOT_PARAMETER_TYPE_SRV = 0x3,
2014  VKD3D_SHADER_ROOT_PARAMETER_TYPE_UAV = 0x4,
2015 
2016  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_PARAMETER_TYPE),
2017 };
2018 
2020 {
2021  enum vkd3d_shader_root_parameter_type parameter_type;
2022  union
2023  {
2024  struct vkd3d_shader_root_descriptor_table descriptor_table;
2025  struct vkd3d_shader_root_constants constants;
2026  struct vkd3d_shader_root_descriptor descriptor;
2027  } u;
2028  enum vkd3d_shader_visibility shader_visibility;
2029 };
2030 
2031 enum vkd3d_shader_root_signature_flags
2032 {
2033  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_NONE = 0x00,
2034  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01,
2035  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02,
2036  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04,
2037  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08,
2038  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
2039  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
2040  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,
2041 
2042  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_FLAGS),
2043 };
2044 
2046 {
2047  unsigned int parameter_count;
2048  const struct vkd3d_shader_root_parameter *parameters;
2049  unsigned int static_sampler_count;
2050  const struct vkd3d_shader_static_sampler_desc *static_samplers;
2051  enum vkd3d_shader_root_signature_flags flags;
2052 };
2053 
2054 /* root signature 1.1 */
2055 enum vkd3d_shader_root_descriptor_flags
2056 {
2057  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_NONE = 0x0,
2058  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2,
2059  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
2060  VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8,
2061 
2062  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_DESCRIPTOR_FLAGS),
2063 };
2064 
2066 {
2067  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_NONE = 0x0,
2068  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1,
2069  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2,
2070  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
2071  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8,
2074 
2075  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_RANGE_FLAGS),
2076 };
2077 
2079 {
2080  enum vkd3d_shader_descriptor_type range_type;
2081  unsigned int descriptor_count;
2082  unsigned int base_shader_register;
2083  unsigned int register_space;
2085  unsigned int descriptor_table_offset;
2086 };
2087 
2089 {
2090  unsigned int descriptor_range_count;
2091  const struct vkd3d_shader_descriptor_range1 *descriptor_ranges;
2092 };
2093 
2095 {
2096  unsigned int shader_register;
2097  unsigned int register_space;
2098  enum vkd3d_shader_root_descriptor_flags flags;
2099 };
2100 
2102 {
2103  enum vkd3d_shader_root_parameter_type parameter_type;
2104  union
2105  {
2106  struct vkd3d_shader_root_descriptor_table1 descriptor_table;
2107  struct vkd3d_shader_root_constants constants;
2108  struct vkd3d_shader_root_descriptor1 descriptor;
2109  } u;
2110  enum vkd3d_shader_visibility shader_visibility;
2111 };
2112 
2114 {
2115  unsigned int parameter_count;
2116  const struct vkd3d_shader_root_parameter1 *parameters;
2117  unsigned int static_sampler_count;
2118  const struct vkd3d_shader_static_sampler_desc *static_samplers;
2119  enum vkd3d_shader_root_signature_flags flags;
2120 };
2121 
2122 enum vkd3d_shader_root_signature_version
2123 {
2124  VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
2125  VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1 = 0x2,
2126 
2127  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_VERSION),
2128 };
2129 
2131 {
2132  enum vkd3d_shader_root_signature_version version;
2133  union
2134  {
2135  struct vkd3d_shader_root_signature_desc v_1_0;
2136  struct vkd3d_shader_root_signature_desc1 v_1_1;
2137  } u;
2138 };
2139 
2145 {
2171 
2172  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_TYPE),
2173 };
2174 
2180 {
2206 
2207  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
2208 };
2209 
2215 {
2230 
2231  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_INFO_FLAG),
2232 };
2233 
2239 {
2246  unsigned int register_space;
2248  unsigned int register_index;
2257  unsigned int flags;
2262  unsigned int count;
2263 };
2264 
2299 {
2305  const void *next;
2306 
2310  unsigned int descriptor_count;
2311 };
2312 
2320 {
2321  unsigned int resource_space;
2322  unsigned int resource_index;
2323  unsigned int sampler_space;
2324  unsigned int sampler_index;
2325 };
2326 
2348 {
2352  const void *next;
2353 
2358 };
2359 
2368 {
2372  const void *next;
2373 
2375  enum vkd3d_shader_tessellator_output_primitive output_primitive;
2377  enum vkd3d_shader_tessellator_partitioning partitioning;
2378 };
2379 
2388 {
2392  const void *next;
2393 
2395  unsigned int x, y, z;
2396 };
2397 
2413 {
2417  const void *next;
2418 
2431 
2451 };
2452 
2458 {
2481 
2482  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPONENT_TYPE),
2483 };
2484 
2487 {
2510  VKD3D_SHADER_SV_TESS_FACTOR_QUADEDGE = 0x0b,
2511  VKD3D_SHADER_SV_TESS_FACTOR_QUADINT = 0x0c,
2512  VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE = 0x0d,
2513  VKD3D_SHADER_SV_TESS_FACTOR_TRIINT = 0x0e,
2514  VKD3D_SHADER_SV_TESS_FACTOR_LINEDET = 0x0f,
2515  VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN = 0x10,
2534 
2535  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SYSVAL_SEMANTIC),
2536 };
2537 
2543 {
2544  VKD3D_SHADER_MINIMUM_PRECISION_NONE = 0,
2553 
2554  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_MINIMUM_PRECISION),
2555 };
2556 
2561 {
2563  const char *semantic_name;
2565  unsigned int semantic_index;
2570  unsigned int stream_index;
2579  unsigned int register_index;
2581  unsigned int mask;
2588  unsigned int used_mask;
2591 };
2592 
2601 {
2605  unsigned int element_count;
2606 };
2607 
2610 {
2611  VKD3D_SHADER_SWIZZLE_X = 0x0,
2612  VKD3D_SHADER_SWIZZLE_Y = 0x1,
2613  VKD3D_SHADER_SWIZZLE_Z = 0x2,
2614  VKD3D_SHADER_SWIZZLE_W = 0x3,
2615 
2616  VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SWIZZLE_COMPONENT),
2617 };
2618 
2625 {
2627  uint32_t tag;
2630 };
2631 
2638 {
2643  uint32_t tag;
2645  uint32_t checksum[4];
2650  unsigned int version;
2652  size_t size;
2657 };
2658 
2663 #define VKD3D_SHADER_SWIZZLE_MASK (0xffu)
2664 
2665 #define VKD3D_SHADER_SWIZZLE_SHIFT(idx) (8u * (idx))
2666 
2676 #define VKD3D_SHADER_SWIZZLE(x, y, z, w) \
2677  (VKD3D_SHADER_SWIZZLE_ ## x << VKD3D_SHADER_SWIZZLE_SHIFT(0) \
2678  | VKD3D_SHADER_SWIZZLE_ ## y << VKD3D_SHADER_SWIZZLE_SHIFT(1) \
2679  | VKD3D_SHADER_SWIZZLE_ ## z << VKD3D_SHADER_SWIZZLE_SHIFT(2) \
2680  | VKD3D_SHADER_SWIZZLE_ ## w << VKD3D_SHADER_SWIZZLE_SHIFT(3))
2681 
2683 #define VKD3D_SHADER_NO_SWIZZLE VKD3D_SHADER_SWIZZLE(X, Y, Z, W)
2684 
2689 {
2694 }
2695 
2738 {
2742  const void *next;
2743 
2746 
2749 
2752 };
2753 
2761 {
2770  unsigned int input_register_index;
2772  unsigned int input_mask;
2773 };
2774 
2800 {
2804  const void *next;
2805 
2819  unsigned int varying_count;
2820 };
2821 
2848 {
2852  const void *next;
2853 
2857  unsigned int parameter_count;
2858 };
2859 
2860 #ifdef LIBVKD3D_SHADER_SOURCE
2861 # define VKD3D_SHADER_API VKD3D_EXPORT
2862 #else
2863 # define VKD3D_SHADER_API VKD3D_IMPORT
2864 #endif
2865 
2866 #ifndef VKD3D_SHADER_NO_PROTOTYPES
2867 
2879 VKD3D_SHADER_API const char *vkd3d_shader_get_version(unsigned int *major, unsigned int *minor);
2895 VKD3D_SHADER_API const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(unsigned int *count);
2911  enum vkd3d_shader_source_type source_type, unsigned int *count);
2912 
2987 VKD3D_SHADER_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
2988  struct vkd3d_shader_code *out, char **messages);
2996 VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages);
3006 VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code);
3007 
3043 VKD3D_SHADER_API int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
3044  struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages);
3055 VKD3D_SHADER_API void vkd3d_shader_free_root_signature(
3056  struct vkd3d_shader_versioned_root_signature_desc *root_signature);
3057 
3086 VKD3D_SHADER_API int vkd3d_shader_serialize_root_signature(
3087  const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
3088  struct vkd3d_shader_code *dxbc, char **messages);
3110  enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src);
3111 
3182 VKD3D_SHADER_API int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages);
3192 VKD3D_SHADER_API void vkd3d_shader_free_scan_descriptor_info(
3193  struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
3194 
3234 VKD3D_SHADER_API int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
3235  struct vkd3d_shader_signature *signature, char **messages);
3256  const struct vkd3d_shader_signature *signature, const char *semantic_name,
3257  unsigned int semantic_index, unsigned int stream_index);
3267 VKD3D_SHADER_API void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature);
3268 
3269 /* 1.3 */
3270 
3304 VKD3D_SHADER_API int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info,
3305  struct vkd3d_shader_code *out, char **messages);
3306 
3317 VKD3D_SHADER_API void vkd3d_shader_set_log_callback(PFN_vkd3d_log callback);
3318 
3330 VKD3D_SHADER_API void vkd3d_shader_free_dxbc(struct vkd3d_shader_dxbc_desc *dxbc);
3331 
3361 VKD3D_SHADER_API int vkd3d_shader_parse_dxbc(const struct vkd3d_shader_code *dxbc,
3362  uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages);
3363 
3394 VKD3D_SHADER_API int vkd3d_shader_serialize_dxbc(size_t section_count,
3395  const struct vkd3d_shader_dxbc_section_desc *sections, struct vkd3d_shader_code *dxbc, char **messages);
3396 
3409 
3435 VKD3D_SHADER_API void vkd3d_shader_build_varying_map(const struct vkd3d_shader_signature *output_signature,
3436  const struct vkd3d_shader_signature *input_signature,
3437  unsigned int *count, struct vkd3d_shader_varying_map *varyings);
3438 
3453 
3454 #endif /* VKD3D_SHADER_NO_PROTOTYPES */
3455 
3457 typedef const char *(*PFN_vkd3d_shader_get_version)(unsigned int *major, unsigned int *minor);
3459 typedef const enum vkd3d_shader_source_type *(*PFN_vkd3d_shader_get_supported_source_types)(unsigned int *count);
3461 typedef const enum vkd3d_shader_target_type *(*PFN_vkd3d_shader_get_supported_target_types)(
3462  enum vkd3d_shader_source_type source_type, unsigned int *count);
3463 
3465 typedef int (*PFN_vkd3d_shader_compile)(const struct vkd3d_shader_compile_info *compile_info,
3466  struct vkd3d_shader_code *out, char **messages);
3468 typedef void (*PFN_vkd3d_shader_free_messages)(char *messages);
3471 
3474  struct vkd3d_shader_versioned_root_signature_desc *root_signature, char **messages);
3477 
3480  const struct vkd3d_shader_versioned_root_signature_desc *root_signature,
3481  struct vkd3d_shader_code *dxbc, char **messages);
3482 
3485  enum vkd3d_shader_root_signature_version version, const struct vkd3d_shader_versioned_root_signature_desc *src);
3486 
3488 typedef int (*PFN_vkd3d_shader_scan)(const struct vkd3d_shader_compile_info *compile_info, char **messages);
3491  struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
3492 
3495  struct vkd3d_shader_signature *signature, char **messages);
3497 typedef struct vkd3d_shader_signature_element * (*PFN_vkd3d_shader_find_signature_element)(
3498  const struct vkd3d_shader_signature *signature, const char *semantic_name,
3499  unsigned int semantic_index, unsigned int stream_index);
3502 
3504 typedef void (*PFN_vkd3d_shader_preprocess)(struct vkd3d_shader_compile_info *compile_info,
3505  struct vkd3d_shader_code *out, char **messages);
3506 
3508 typedef void (*PFN_vkd3d_shader_set_log_callback)(PFN_vkd3d_log callback);
3509 
3513 typedef int (*PFN_vkd3d_shader_parse_dxbc)(const struct vkd3d_shader_code *dxbc,
3514  uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages);
3517  const struct vkd3d_shader_dxbc_section_desc *sections, struct vkd3d_shader_code *dxbc, char **messages);
3518 
3520 typedef void (*PFN_vkd3d_shader_build_varying_map)(const struct vkd3d_shader_signature *output_signature,
3521  const struct vkd3d_shader_signature *input_signature,
3522  unsigned int *count, struct vkd3d_shader_varying_map *varyings);
3525 
3529 
3530 #ifdef __cplusplus
3531 }
3532 #endif /* __cplusplus */
3533 
3534 #endif /* __VKD3D_SHADER_H */
vkd3d_shader_visibility
Describes which shader stages a resource is visible to.
Definition: vkd3d_shader.h:405
The descriptor is a comparison sampler.
Definition: vkd3d_shader.h:2224
Definition: vkd3d_shader.h:1995
Describes the mapping of a single resource or resource array to its binding point in the target envir...
Definition: vkd3d_shader.h:1244
Definition: vkd3d_shader.h:1989
vkd3d_shader_descriptor_type
The type of a shader resource descriptor.
Definition: vkd3d_shader.h:449
const char * profile
Pointer to a null-terminated string containing the target shader profile.
Definition: vkd3d_shader.h:1883
The float constant register set, c# in Direct3D assembly.
Definition: vkd3d_shader.h:1220
enum vkd3d_shader_structure_type type
Input; must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO.
Definition: vkd3d_shader.h:2303
A chained structure containing compilation parameters.
Definition: vkd3d_shader.h:1607
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().
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2804
uint32_t tag
The section tag.
Definition: vkd3d_shader.h:2627
Cubemap array texture.
Definition: vkd3d_shader.h:2170
The descriptor is a raw (byte-addressed) buffer.
Definition: vkd3d_shader.h:2229
16-bit signed integer.
Definition: vkd3d_shader.h:2550
Cubemap texture.
Definition: vkd3d_shader.h:2162
unsigned int uav_counter_count
Size, in elements, of uav_counters.
Definition: vkd3d_shader.h:1391
1-dimensional texture.
Definition: vkd3d_shader.h:2154
const char * semantic_name
Semantic name.
Definition: vkd3d_shader.h:2563
Definition: vkd3d_shader.h:2094
int(* PFN_vkd3d_shader_scan)(const struct vkd3d_shader_compile_info *compile_info, char **messages)
Type of vkd3d_shader_scan().
Definition: vkd3d_shader.h:3488
Emit the signatures when disassembling a shader.
Definition: vkd3d_shader.h:184
The parameter is provided as a 32-bit float.
Definition: vkd3d_shader.h:646
Continuation of the previous component.
Definition: vkd3d_shader.h:2205
enum vkd3d_shader_target_type target_type
Desired output format.
Definition: vkd3d_shader.h:1624
Maximum point size.
Definition: vkd3d_shader.h:840
32-bit IEEE floating-point.
Definition: vkd3d_shader.h:2466
The resource is visible to all shader stages.
Definition: vkd3d_shader.h:408
unsigned int descriptor_table_offset
Byte offset within the push constants of an array of 32-bit descriptor array offsets.
Definition: vkd3d_shader.h:1445
Definition: vkd3d_shader.h:1980
The resource is visible only to the pixel shader.
Definition: vkd3d_shader.h:418
vkd3d_shader_parameter_name
Names a specific shader parameter, used in struct vkd3d_shader_parameter and struct vkd3d_shader_para...
Definition: vkd3d_shader.h:662
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.
Describes the mapping of a Direct3D constant buffer to a range of push constants in the target enviro...
Definition: vkd3d_shader.h:1332
The structure is a vkd3d_shader_compile_info structure.
Definition: vkd3d_shader.h:72
struct vkd3d_shader_dxbc_section_desc * sections
Descriptions of the sections contained in the DXBC.
Definition: vkd3d_shader.h:2656
const void * code
Pointer to the code.
Definition: vkd3d_shader.h:443
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:3473
unsigned int binding_count
Size, in elements, of bindings.
Definition: vkd3d_shader.h:1376
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.
const struct vkd3d_shader_parameter1 * parameters
Pointer to an array of dynamic parameters for this shader instance.
Definition: vkd3d_shader.h:2855
Whether the triangle is front-facing; SV_IsFrontFace in Direct3D.
Definition: vkd3d_shader.h:2507
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2372
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:3476
Clip plane values.
Definition: vkd3d_shader.h:781
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...
A chained structure describing the thread group size in a compute shader.
Definition: vkd3d_shader.h:2387
struct vkd3d_shader_code data
The contents of the section.
Definition: vkd3d_shader.h:2629
Binary format used by Direct3D 9/10.x/11 effects profiles.
Definition: vkd3d_shader.h:1575
3-dimensional texture.
Definition: vkd3d_shader.h:2160
unsigned int descriptor_table_count
Size, in elements, of the descriptor table push constant array.
Definition: vkd3d_shader.h:1447
value is a member of enum vkd3d_shader_api_version.
Definition: vkd3d_shader.h:302
const char * source_name
Name of the initial source file, which may be used in error messages or debug information.
Definition: vkd3d_shader.h:1646
unsigned int binding
The binding index of the uniform buffer descriptor.
Definition: vkd3d_shader.h:1129
Depth, which is guaranteed to be less than or equal to the current depth; SV_DepthLessEqual in Direct...
Definition: vkd3d_shader.h:2531
vkd3d_shader_component_type
Data type of a shader varying, returned as part of struct vkd3d_shader_signature_element.
Definition: vkd3d_shader.h:2457
unsigned int offset
Offset, in bytes, of the target push constants.
Definition: vkd3d_shader.h:1345
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:1322
int(* PFN_vkd3d_shader_serialize_dxbc)(size_t section_count, const struct vkd3d_shader_dxbc_section_desc *sections, struct vkd3d_shader_code *dxbc, char **messages)
Type of vkd3d_shader_serialize_dxbc().
Definition: vkd3d_shader.h:3516
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:1845
The structure is a vkd3d_shader_descriptor_offset_info structure.
Definition: vkd3d_shader.h:98
A &#39;DirectX Intermediate Language&#39; shader embedded in a DXBC container.
Definition: vkd3d_shader.h:1524
vkd3d_shader_parse_dxbc_flags
Flags for vkd3d_shader_parse_dxbc().
Definition: vkd3d_shader.h:278
Sample mask; SV_Coverage in Direct3D.
Definition: vkd3d_shader.h:2521
A chained structure containing legacy Direct3D bytecode compilation parameters.
Definition: vkd3d_shader.h:2412
Stencil reference; SV_StencilRef in Direct3D.
Definition: vkd3d_shader.h:2533
void(* PFN_vkd3d_shader_free_messages)(char *messages)
Type of vkd3d_shader_free_messages().
Definition: vkd3d_shader.h:3468
const struct vkd3d_shader_combined_resource_sampler * combined_samplers
Pointer to an array of bindings for combined samplers.
Definition: vkd3d_shader.h:1384
The structure is a vkd3d_shader_interface_info structure.
Definition: vkd3d_shader.h:74
unsigned int binding
The binding index of the descriptor.
Definition: vkd3d_shader.h:487
unsigned int register_space
Register space of the resource, or 0 if the shader does not support multiple register spaces...
Definition: vkd3d_shader.h:2246
vkd3d_shader_fog_source
The source of the fog varying output by a pre-rasterization shader.
Definition: vkd3d_shader.h:582
vkd3d_shader_d3dbc_constant_register
Symbolic register indices for mapping uniform constant register sets in legacy Direct3D bytecode to c...
Definition: vkd3d_shader.h:1217
struct vkd3d_shader_parameter_specialization_constant specialization_constant
Additional information if type is VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT.
Definition: vkd3d_shader.h:1197
unsigned int resource_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:1285
enum vkd3d_shader_source_type source_type
Format of the input code passed in source.
Definition: vkd3d_shader.h:1622
unsigned int register_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:1338
A description of a DXBC section.
Definition: vkd3d_shader.h:2624
unsigned int register_index
Register index.
Definition: vkd3d_shader.h:2579
The resource is visible only to the geometry shader.
Definition: vkd3d_shader.h:416
A common structure describing the bind point of a descriptor or descriptor array in the target enviro...
Definition: vkd3d_shader.h:479
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:1791
Definition: vkd3d_shader.h:1655
Use buffer textures for buffer UAVs.
Definition: vkd3d_shader.h:147
void(* PFN_vkd3d_shader_free_dxbc)(struct vkd3d_shader_dxbc_desc *dxbc)
Type of vkd3d_shader_free_dxbc().
Definition: vkd3d_shader.h:3511
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_SIGNATURE_INFO.
Definition: vkd3d_shader.h:2740
IEEE double-precision floating-point.
Definition: vkd3d_shader.h:2199
Definition: vkd3d_shader.h:1394
vkd3d_shader_spirv_environment
Definition: vkd3d_shader.h:1649
size_t section_count
The number of sections contained in the DXBC.
Definition: vkd3d_shader.h:2654
Bump-mapping luminance offset.
Definition: vkd3d_shader.h:1036
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...
16-bit unsigned integer.
Definition: vkd3d_shader.h:2478
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1616
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1438
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.
Definition: vkd3d_shader.h:1718
Definition: vkd3d_shader.h:2078
16-bit unsigned integer.
Definition: vkd3d_shader.h:2552
enum vkd3d_shader_parameter_type type
How the parameter will be provided to the shader.
Definition: vkd3d_shader.h:1180
Render target; SV_Target in Direct3D.
Definition: vkd3d_shader.h:2517
The descriptor is a UAV resource, on which the shader performs atomic ops.
Definition: vkd3d_shader.h:2227
Describes a single shader descriptor; returned as part of struct vkd3d_shader_scan_descriptor_info.
Definition: vkd3d_shader.h:2238
vkd3d_shader_parameter_type
The manner in which a parameter value is provided to the shader, used in struct vkd3d_shader_paramete...
Definition: vkd3d_shader.h:615
The linkage of a parameter specified through a uniform buffer, used in struct vkd3d_shader_parameter1...
Definition: vkd3d_shader.h:1121
const struct vkd3d_shader_resource_binding * bindings
Pointer to an array of bindings for shader resource descriptors.
Definition: vkd3d_shader.h:1374
unsigned int version
The DXBC version.
Definition: vkd3d_shader.h:2650
16-bit signed integer.
Definition: vkd3d_shader.h:2480
Causes compiler to convert SM1-3 semantics to corresponding System Value semantics, when compiling HLSL sources for SM4+ targets.
Definition: vkd3d_shader.h:212
value is a member of enum vkd3d_shader_compile_option_buffer_uav.
Definition: vkd3d_shader.h:298
The SPIR-V target environment supports zero-initializing workgroup memory.
Definition: vkd3d_shader.h:268
unsigned int register_index
Register index of the Direct3D UAV descriptor.
Definition: vkd3d_shader.h:1317
A chained structure containing descriptor offsets.
Definition: vkd3d_shader.h:1433
size_t size
The total size of the DXBC blob.
Definition: vkd3d_shader.h:2652
vkd3d_shader_compile_option_buffer_uav
Determines how buffer UAVs are stored.
Definition: vkd3d_shader.h:144
Definition: vkd3d_shader.h:1405
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...
unsigned int count
Size of this descriptor array, or 1 if a single descriptor.
Definition: vkd3d_shader.h:2262
unsigned int stream_index
Stream index of a geometry shader output semantic.
Definition: vkd3d_shader.h:2570
Sample index; SV_SampleIndex in Direct3D.
Definition: vkd3d_shader.h:2509
16-bit floating-point.
Definition: vkd3d_shader.h:2546
const struct vkd3d_shader_push_constant_buffer * push_constant_buffers
Pointer to an array of bindings for push constant buffers.
Definition: vkd3d_shader.h:1379
struct vkd3d_shader_signature_element * elements
Pointer to an array of varyings.
Definition: vkd3d_shader.h:2603
Instance ID; SV_InstanceID in Direct3D.
Definition: vkd3d_shader.h:2505
const void * next
Input; optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2305
unsigned int push_constant_buffer_count
Size, in elements, of push_constant_buffers.
Definition: vkd3d_shader.h:1381
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1809
The fog interpolation factor is 2^-(k * c).
Definition: vkd3d_shader.h:540
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().
enum vkd3d_shader_parameter_data_type data_type
The data type of the supplied parameter, which determines how it is to be interpreted.
Definition: vkd3d_shader.h:1185
A mask of enabled clip planes.
Definition: vkd3d_shader.h:764
The structure is a vkd3d_shader_varying_map_info structure.
Definition: vkd3d_shader.h:108
Whether texture coordinate inputs should take their values from the point coordinate.
Definition: vkd3d_shader.h:873
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().
The descriptor has no relevant data type.
Definition: vkd3d_shader.h:2185
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:1301
The descriptor is a UAV resource, whose counter is read from or written to by the shader...
Definition: vkd3d_shader.h:2220
vkd3d_shader_compile_option_formatting_flags
Definition: vkd3d_shader.h:171
The fog interpolation factor is (E - c) * k.
Definition: vkd3d_shader.h:567
vkd3d_shader_api_version
Definition: vkd3d_shader.h:43
Describes the mapping of a Direct3D resource-sampler pair to a combined sampler (i.e.
Definition: vkd3d_shader.h:1279
No messages will be returned.
Definition: vkd3d_shader.h:1591
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:3484
unsigned int register_index
Register index of the descriptor.
Definition: vkd3d_shader.h:2248
This option specifies the origin of fragment coordinates for SPIR-V targets.
Definition: vkd3d_shader.h:343
vkd3d_shader_spirv_extension
Definition: vkd3d_shader.h:1660
vkd3d_shader_sysval_semantic
System value semantic, returned as part of struct vkd3d_shader_signature.
Definition: vkd3d_shader.h:2486
vkd3d_shader_fog_fragment_mode
The factor used to interpolate the fragment output colour with fog.
Definition: vkd3d_shader.h:520
const struct vkd3d_shader_macro * macros
Pointer to an array of predefined macros.
Definition: vkd3d_shader.h:1819
The SPIR-V target environment supports 64-bit integer types.
Definition: vkd3d_shader.h:251
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_HULL_SHADER_TESSELLATION_INFO.
Definition: vkd3d_shader.h:2370
If value is nonzero, do not include debug information in the compiled shader.
Definition: vkd3d_shader.h:296
32-bit signed integer.
Definition: vkd3d_shader.h:2464
struct vkd3d_shader_signature output
The shader output varyings.
Definition: vkd3d_shader.h:2748
Definition: vkd3d_shader.h:1416
No fog interpolation is applied; the output colour is passed through unmodified.
Definition: vkd3d_shader.h:527
vkd3d_shader_parameter_data_type
The format of data provided to the shader, used in struct vkd3d_shader_parameter and struct vkd3d_sha...
Definition: vkd3d_shader.h:640
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:3479
The parameter value is provided to the shader via specialization constants.
Definition: vkd3d_shader.h:624
Definition: vkd3d_shader.h:2088
unsigned int parameter_count
Size, in elements, of parameters.
Definition: vkd3d_shader.h:2857
This option specifies the shader features available in the target environment.
Definition: vkd3d_shader.h:353
vkd3d_shader_log_level
Describes the minimum severity of compilation messages returned by vkd3d_shader_compile() and similar...
Definition: vkd3d_shader.h:1588
64-bit signed integer.
Definition: vkd3d_shader.h:2474
void(* PFN_vkd3d_shader_free_scan_combined_resource_sampler_info)(struct vkd3d_shader_scan_combined_resource_sampler_info *info)
Type of vkd3d_shader_free_scan_combined_resource_sampler_info().
Definition: vkd3d_shader.h:3527
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:1342
A chained structure describing the tessellation information in a hull shader.
Definition: vkd3d_shader.h:2367
VKD3D_SHADER_API int vkd3d_shader_parse_dxbc(const struct vkd3d_shader_code *dxbc, uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages)
Parse a DXBC blob contained in a vkd3d_shader_code structure.
enum vkd3d_shader_component_type component_type
Data type.
Definition: vkd3d_shader.h:2577
enum vkd3d_shader_descriptor_type type
Type of the descriptor (for example, SRV, CBV, UAV, or sampler).
Definition: vkd3d_shader.h:2241
The value of an immediate constant parameter, used in struct vkd3d_shader_parameter.
Definition: vkd3d_shader.h:1050
The sample count of the framebuffer, as returned by the HLSL function GetRenderTargetSampleCount() or...
Definition: vkd3d_shader.h:677
The SPIR-V target environment supports wave operations.
Definition: vkd3d_shader.h:264
enum vkd3d_shader_resource_data_type resource_data_type
Data type contained in the resource (for example, float or integer).
Definition: vkd3d_shader.h:2252
A D3DX texture shader.
Definition: vkd3d_shader.h:1534
vkd3d_shader_compile_option_pack_matrix_order
Determines how matrices are stored.
Definition: vkd3d_shader.h:190
Vertex position; SV_Position in Direct3D.
Definition: vkd3d_shader.h:2491
A SPIR-V shader in binary form.
Definition: vkd3d_shader.h:1551
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO.
Definition: vkd3d_shader.h:1436
Depth; SV_Depth in Direct3D.
Definition: vkd3d_shader.h:2519
VKD3D_SHADER_API void vkd3d_shader_free_messages(char *messages)
Free shader messages allocated by another vkd3d-shader function, such as vkd3d_shader_compile().
The linkage of a specialization constant parameter, used in struct vkd3d_shader_parameter and struct ...
Definition: vkd3d_shader.h:1105
Signed normalized integer.
Definition: vkd3d_shader.h:2189
The structure is a vkd3d_shader_scan_thread_group_size_info structure.
Definition: vkd3d_shader.h:128
Fragment coordinates originate from the lower-left.
Definition: vkd3d_shader.h:240
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:2179
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_THREAD_GROUP_SIZE_INFO.
Definition: vkd3d_shader.h:2390
float f32
The value if the parameter&#39;s data type is VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32.
Definition: vkd3d_shader.h:1088
High-Level Shader Language source code.
Definition: vkd3d_shader.h:1514
vkd3d_shader_structure_type
The type of a chained structure.
Definition: vkd3d_shader.h:69
Unsigned normalized integer.
Definition: vkd3d_shader.h:2187
const struct vkd3d_shader_descriptor_offset * binding_offsets
Pointer to an array of struct vkd3d_shader_descriptor_offset objects.
Definition: vkd3d_shader.h:1490
The structure is a vkd3d_shader_parameter_info structure.
Definition: vkd3d_shader.h:118
uint32_t shadow_samplers
A mask indicating which samplers should be shadow (i.e.
Definition: vkd3d_shader.h:2450
VKD3D_SHADER_API int vkd3d_shader_serialize_dxbc(size_t section_count, const struct vkd3d_shader_dxbc_section_desc *sections, struct vkd3d_shader_code *dxbc, char **messages)
Serialize a DXBC description into a blob stored in a vkd3d_shader_code structure. ...
If the source shader has a fog varying, it is not modified.
Definition: vkd3d_shader.h:596
The shader has no type or is to be ignored.
Definition: vkd3d_shader.h:1546
const struct vkd3d_shader_descriptor_offset * uav_counter_offsets
Pointer to an array of offsets into the descriptor arrays referenced by the &#39;uav_counters&#39; array in s...
Definition: vkd3d_shader.h:1497
Boolean.
Definition: vkd3d_shader.h:2468
unsigned int register_space
Register space of the Direct3D UAV descriptor.
Definition: vkd3d_shader.h:1315
Multisampled 2-dimensional texture.
Definition: vkd3d_shader.h:2158
Use R32(u)i/R32f format for UAVs which are read from.
Definition: vkd3d_shader.h:161
If value is non-zero compilation will produce a child effect using shared object descriptions, as instructed by the "shared" modifier.
Definition: vkd3d_shader.h:364
unsigned int input_mask
The mask consumed by the destination register.
Definition: vkd3d_shader.h:2772
unsigned int macro_count
Size, in elements, of macros.
Definition: vkd3d_shader.h:1821
unsigned int varying_count
The number of registers provided in varying_map.
Definition: vkd3d_shader.h:2819
struct vkd3d_shader_parameter_buffer buffer
Additional information if type is VKD3D_SHADER_PARAMETER_TYPE_BUFFER.
Definition: vkd3d_shader.h:1202
uint32_t checksum[4]
A checksum of the DXBC contents.
Definition: vkd3d_shader.h:2645
Fragment coordinates originate from the upper-left.
Definition: vkd3d_shader.h:237
The structure is a vkd3d_shader_d3dbc_source_info structure.
Definition: vkd3d_shader.h:133
enum vkd3d_shader_tessellator_output_primitive output_primitive
The tessellation output primitive.
Definition: vkd3d_shader.h:2375
Alpha test comparison function.
Definition: vkd3d_shader.h:702
This option specifies default matrix packing order for HLSL sources.
Definition: vkd3d_shader.h:325
#define VKD3D_SHADER_SWIZZLE_MASK
A mask selecting one component from a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:2663
unsigned int input_register_index
The register index of the input varying to map this register to.
Definition: vkd3d_shader.h:2770
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:1775
const struct vkd3d_shader_uav_counter_binding * uav_counters
Pointer to an array of bindings for UAV counters.
Definition: vkd3d_shader.h:1389
An individual shader parameter.
Definition: vkd3d_shader.h:1175
uint32_t u32
The value if the parameter&#39;s data type is VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.
Definition: vkd3d_shader.h:1083
An &#39;OpenGL Shading Language&#39; shader.
Definition: vkd3d_shader.h:1570
Signed integer.
Definition: vkd3d_shader.h:2191
VKD3D_SHADER_API void vkd3d_shader_build_varying_map(const struct vkd3d_shader_signature *output_signature, const struct vkd3d_shader_signature *input_signature, unsigned int *count, struct vkd3d_shader_varying_map *varyings)
Build a mapping of output varyings in a shader stage to input varyings in the following shader stage...
The varying has no type.
Definition: vkd3d_shader.h:2460
The structure is a vkd3d_shader_hlsl_source_info structure.
Definition: vkd3d_shader.h:88
No system value.
Definition: vkd3d_shader.h:2489
Render target layer; SV_RenderTargetArrayIndex in Direct3D.
Definition: vkd3d_shader.h:2497
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2417
enum vkd3d_shader_log_level log_level
Minimum severity of messages returned from the shader function.
Definition: vkd3d_shader.h:1641
Definition: vkd3d_shader.h:1963
The structure is a vkd3d_shader_transform_feedback_info structure.
Definition: vkd3d_shader.h:82
Depth, which is guaranteed to be greater than or equal to the current depth; SV_DepthGreaterEqual in ...
Definition: vkd3d_shader.h:2526
value is a member of enum vkd3d_shader_compile_option_typed_uav.
Definition: vkd3d_shader.h:304
unsigned int element_count
Size, in elements, of elements.
Definition: vkd3d_shader.h:2605
vkd3d_shader_resource_type
The type of a shader resource, returned as part of struct vkd3d_shader_descriptor_info.
Definition: vkd3d_shader.h:2144
If value is nonzero, emit a compile warning warn when vectors or matrices are truncated in an implici...
Definition: vkd3d_shader.h:375
vkd3d_shader_compile_option_fragment_coordinate_origin
Determines the origin of fragment coordinates.
Definition: vkd3d_shader.h:233
vkd3d_shader_descriptor_range_flags
Definition: vkd3d_shader.h:2065
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:3494
A single preprocessor macro, passed as part of struct vkd3d_shader_preprocess_info.
Definition: vkd3d_shader.h:1731
enum vkd3d_shader_sysval_semantic sysval_semantic
System value semantic.
Definition: vkd3d_shader.h:2575
A chained structure containing HLSL compilation parameters.
Definition: vkd3d_shader.h:1864
uint32_t id
The ID of the specialization constant.
Definition: vkd3d_shader.h:1114
unsigned int resource_index
Register index of the Direct3D resource.
Definition: vkd3d_shader.h:1287
The integer constant register set, i# in Direct3D assembly.
Definition: vkd3d_shader.h:1222
A chained structure describing the interface between a compiled shader and the target environment...
Definition: vkd3d_shader.h:1366
vkd3d_shader_compile_option_feature_flags
Advertises feature availability.
Definition: vkd3d_shader.h:246
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:1835
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_PARAMETER_INFO.
Definition: vkd3d_shader.h:2850
10-bit fixed point (2 integer and 8 fractional bits).
Definition: vkd3d_shader.h:2548
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2852
uint32_t offset
The byte offset of the parameter within the buffer.
Definition: vkd3d_shader.h:1131
A chained structure describing the resource-sampler pairs used by a shader.
Definition: vkd3d_shader.h:2347
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1869
enum vkd3d_shader_compile_option_name name
Name of the option.
Definition: vkd3d_shader.h:396
struct vkd3d_shader_signature patch_constant
The shader patch constant varyings.
Definition: vkd3d_shader.h:2751
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...
The parameter value is embedded directly in the shader.
Definition: vkd3d_shader.h:619
The value of an immediate constant parameter, used in struct vkd3d_shader_parameter1.
Definition: vkd3d_shader.h:1075
uint32_t u32
The value if the parameter&#39;s data type is VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.
Definition: vkd3d_shader.h:1058
Primitive ID; SV_PrimitiveID in Direct3D.
Definition: vkd3d_shader.h:2503
Bump-mapping luminance scale factor.
Definition: vkd3d_shader.h:1012
struct vkd3d_shader_code source
Input source code or byte code.
Definition: vkd3d_shader.h:1619
64-bit unsigned integer.
Definition: vkd3d_shader.h:2472
The fog interpolation factor is 2^-((k * c)²).
Definition: vkd3d_shader.h:553
unsigned int flags
A combination of zero or more elements of vkd3d_shader_binding_flag.
Definition: vkd3d_shader.h:1265
All messages, including general informational messages, will be returned.
Definition: vkd3d_shader.h:1599
Alpha test reference value.
Definition: vkd3d_shader.h:712
Only fatal errors which prevent successful compilation will be returned.
Definition: vkd3d_shader.h:1593
size_t size
Size of code, in bytes.
Definition: vkd3d_shader.h:445
The resource is visible only to the vertex shader.
Definition: vkd3d_shader.h:410
Fog source.
Definition: vkd3d_shader.h:964
The descriptor is a constant buffer view.
Definition: vkd3d_shader.h:465
Point size.
Definition: vkd3d_shader.h:807
This option is used to enable various backward compatibility features.
Definition: vkd3d_shader.h:333
If value is nonzero, empty constant buffers descriptions are written out in the output effect binary...
Definition: vkd3d_shader.h:383
Cull distance; SV_CullDistance in Direct3D.
Definition: vkd3d_shader.h:2495
The structure is a vkd3d_shader_spirv_domain_shader_target_info structure.
Definition: vkd3d_shader.h:78
enum vkd3d_shader_tessellator_partitioning partitioning
The tessellation partitioning mode.
Definition: vkd3d_shader.h:2377
VKD3D_SHADER_API void vkd3d_shader_free_dxbc(struct vkd3d_shader_dxbc_desc *dxbc)
Free the contents of a vkd3d_shader_dxbc_desc structure allocated by another vkd3d-shader function...
Minimum point size.
Definition: vkd3d_shader.h:830
float f32_vec4[4]
A pointer to the value if the parameter&#39;s data type is VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4...
Definition: vkd3d_shader.h:1095
Causes &#39;double&#39; to behave as an alias for &#39;float&#39;.
Definition: vkd3d_shader.h:223
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO.
Definition: vkd3d_shader.h:1369
A generic structure containing a GPU shader, in text or byte-code format.
Definition: vkd3d_shader.h:427
A chained structure which describes how output varyings in this shader stage should be mapped to inpu...
Definition: vkd3d_shader.h:2799
const struct vkd3d_shader_compile_option * options
Pointer to an array of compilation options.
Definition: vkd3d_shader.h:1636
The structure is a vkd3d_shader_scan_signature_info structure.
Definition: vkd3d_shader.h:103
Bump-mapping matrix.
Definition: vkd3d_shader.h:988
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_COMBINED_RESOURCE_SAMPLER_INFO.
Definition: vkd3d_shader.h:2350
struct vkd3d_shader_combined_resource_sampler_info * combined_samplers
Pointer to an array of resource-sampler pairs.
Definition: vkd3d_shader.h:2355
16-bit IEEE floating-point.
Definition: vkd3d_shader.h:2476
void(* PFN_vkd3d_shader_free_scan_signature_info)(struct vkd3d_shader_scan_signature_info *info)
Type of vkd3d_shader_free_scan_signature_info().
Definition: vkd3d_shader.h:3524
Direct3D shader assembly.
Definition: vkd3d_shader.h:1556
The descriptor is a UAV resource, which is read from by the shader.
Definition: vkd3d_shader.h:2222
A chained structure enumerating the descriptors declared by a shader.
Definition: vkd3d_shader.h:2298
The structure is a vkd3d_shader_scan_hull_shader_tessellation_info structure.
Definition: vkd3d_shader.h:123
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:1296
uint32_t tag
The DXBC tag.
Definition: vkd3d_shader.h:2643
The parameter is provided as a 4-dimensional vector of 32-bit floats.
Definition: vkd3d_shader.h:653
unsigned int value
A value associated with the option.
Definition: vkd3d_shader.h:401
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_D3DBC_SOURCE_INFO.
Definition: vkd3d_shader.h:2415
unsigned int count
The size of this descriptor array.
Definition: vkd3d_shader.h:493
enum vkd3d_shader_parameter_name name
The builtin parameter to be mapped.
Definition: vkd3d_shader.h:1178
vkd3d_shader_swizzle_component
Possible values for a single component of a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:2609
struct vkd3d_shader_descriptor_info * descriptors
Output; returns a pointer to an array of descriptors.
Definition: vkd3d_shader.h:2308
The descriptor is a sampler.
Definition: vkd3d_shader.h:470
const char * entry_point
Optional pointer to a null-terminated string containing the shader entry point.
Definition: vkd3d_shader.h:1877
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx)
The offset, in bits, of the nth parameter of a vkd3d-shader swizzle.
Definition: vkd3d_shader.h:2665
vkd3d_shader_source_type
The format of a shader to be compiled or scanned.
Definition: vkd3d_shader.h:1501
unsigned int descriptor_count
Output; size, in elements, of descriptors.
Definition: vkd3d_shader.h:2310
unsigned int register_index
Register index of the Direct3D resource.
Definition: vkd3d_shader.h:1340
VKD3D_SHADER_API const char * vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
Returns the current version of this library.
Binary format used by Direct3D 9/10.x/11 effects.
Definition: vkd3d_shader.h:1529
A chained structure containing descriptions of shader inputs and outputs.
Definition: vkd3d_shader.h:2737
const struct vkd3d_shader_varying_map * varying_map
A mapping of output varyings in this shader stage to input varyings in the next shader stage...
Definition: vkd3d_shader.h:2817
Dimensionless buffer.
Definition: vkd3d_shader.h:2152
The type is invalid or not applicable for this descriptor.
Definition: vkd3d_shader.h:2150
unsigned int output_signature_index
The signature index (in the output signature) of the output varying.
Definition: vkd3d_shader.h:2768
VKD3D_SHADER_API void vkd3d_shader_free_scan_combined_resource_sampler_info(struct vkd3d_shader_scan_combined_resource_sampler_info *info)
Free members of struct vkd3d_shader_scan_combined_resource_sampler_info allocated by vkd3d_shader_sca...
vkd3d_shader_compile_option_typed_uav
Determines how typed UAVs are declared.
Definition: vkd3d_shader.h:158
32-bit unsigned integer.
Definition: vkd3d_shader.h:2462
Description of a shader input or output signature.
Definition: vkd3d_shader.h:2600
Undefined/type-less.
Definition: vkd3d_shader.h:2197
A &#39;Tokenized Program Format&#39; shader embedded in a DXBC container.
Definition: vkd3d_shader.h:1512
Use Unknown format for UAVs which are read from.
Definition: vkd3d_shader.h:166
IEEE single-precision floating-point.
Definition: vkd3d_shader.h:2195
The structure is a vkd3d_shader_scan_combined_resource_sampler_info structure.
Definition: vkd3d_shader.h:113
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:2686
struct vkd3d_shader_signature input
The shader input varyings.
Definition: vkd3d_shader.h:2745
Definition: vkd3d_shader.h:2101
A chained structure containing preprocessing parameters.
Definition: vkd3d_shader.h:1804
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO.
Definition: vkd3d_shader.h:1867
Describes the mapping of a single Direct3D UAV counter.
Definition: vkd3d_shader.h:1309
Non-fatal warnings and fatal errors will be returned.
Definition: vkd3d_shader.h:1595
const char * value
Optional pointer to a null-terminated string containing the expansion of the macro.
Definition: vkd3d_shader.h:1744
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:3504
The structure is a vkd3d_shader_preprocess_info structure.
Definition: vkd3d_shader.h:93
The fog source is the W component of the position output by the vertex shader.
Definition: vkd3d_shader.h:606
2-dimensional array texture.
Definition: vkd3d_shader.h:2166
unsigned int mask
Mask of the register components allocated to this varying.
Definition: vkd3d_shader.h:2581
A &#39;Metal Shading Language&#39; shader.
Definition: vkd3d_shader.h:1579
Definition: vkd3d_shader.h:2002
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:1850
Definition: vkd3d_shader.h:2019
Fog mode used in fragment shaders.
Definition: vkd3d_shader.h:901
This file contains definitions for basic types used by vkd3d libraries.
enum vkd3d_shader_descriptor_type type
The type of this descriptor.
Definition: vkd3d_shader.h:1247
unsigned int register_space
Register space of the Direct3D resource.
Definition: vkd3d_shader.h:1252
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 DXBC shader, returning a structural description which can be e...
void(* PFN_vkd3d_shader_build_varying_map)(const struct vkd3d_shader_signature *output_signature, const struct vkd3d_shader_signature *input_signature, unsigned int *count, struct vkd3d_shader_varying_map *varyings)
Type of vkd3d_shader_build_varying_map().
Definition: vkd3d_shader.h:3520
unsigned int size
Size, in bytes, of the target push constants.
Definition: vkd3d_shader.h:1347
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2392
Interface information regarding a builtin shader parameter.
Definition: vkd3d_shader.h:2847
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.
Legacy Direct3D byte-code.
Definition: vkd3d_shader.h:1519
Viewport index; SV_ViewportArrayIndex in Direct3D.
Definition: vkd3d_shader.h:2499
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:3490
The shader has no type or is to be ignored.
Definition: vkd3d_shader.h:1507
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO.
Definition: vkd3d_shader.h:1807
unsigned int flags
A combination of zero or more elements of vkd3d_shader_binding_flag.
Definition: vkd3d_shader.h:1298
enum vkd3d_shader_resource_type resource_type
Resource type, if applicable, including its dimension.
Definition: vkd3d_shader.h:2250
Unsigned integer.
Definition: vkd3d_shader.h:2193
A &#39;Tokenized Program Format&#39; shader embedded in a DXBC container.
Definition: vkd3d_shader.h:1566
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_INFO.
Definition: vkd3d_shader.h:2802
vkd3d_shader_minimum_precision
Minimum interpolation precision of a shader varying, returned as part of struct vkd3d_shader_signatur...
Definition: vkd3d_shader.h:2542
unsigned int register_index
Register index of the Direct3D resource.
Definition: vkd3d_shader.h:1261
The fog source is the Z component of the position output by the vertex shader.
Definition: vkd3d_shader.h:601
value is a member of enum vkd3d_shader_compile_option_formatting_flags.
Definition: vkd3d_shader.h:300
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().
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the UAV counter is visible.
Definition: vkd3d_shader.h:1319
unsigned int combined_sampler_count
The number of resource-sampler pairs in combined_samplers.
Definition: vkd3d_shader.h:2357
VKD3D_SHADER_API void vkd3d_shader_free_scan_signature_info(struct vkd3d_shader_scan_signature_info *info)
Free members of struct vkd3d_shader_scan_signature_info allocated by vkd3d_shader_scan().
enum vkd3d_shader_visibility shader_visibility
Shader stage(s) to which the resource is visible.
Definition: vkd3d_shader.h:1263
void(* PFN_vkd3d_shader_free_shader_code)(struct vkd3d_shader_code *code)
Type of vkd3d_shader_free_shader_code().
Definition: vkd3d_shader.h:3470
A description of a DXBC blob, as returned by vkd3d_shader_parse_dxbc().
Definition: vkd3d_shader.h:2637
2-dimensional texture.
Definition: vkd3d_shader.h:2156
unsigned int sampler_index
Register index of the Direct3D sampler.
Definition: vkd3d_shader.h:1294
The resource is visible only to the hull shader.
Definition: vkd3d_shader.h:412
If value is nonzero, write the point size for Vulkan tessellation and geometry shaders.
Definition: vkd3d_shader.h:316
struct vkd3d_shader_descriptor_binding binding
The binding in the target environment.
Definition: vkd3d_shader.h:1268
unsigned int sampler_space
Register space of the Direct3D sampler.
Definition: vkd3d_shader.h:1292
Definition: vkd3d_shader.h:2045
unsigned int x
The thread group size in the x/y/z direction.
Definition: vkd3d_shader.h:2395
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...
The source shader is not modified.
Definition: vkd3d_shader.h:588
Multisampled 2-dimensional array texture.
Definition: vkd3d_shader.h:2168
float f32
The value if the parameter&#39;s data type is VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32.
Definition: vkd3d_shader.h:1065
void(* PFN_vkd3d_shader_free_shader_signature)(struct vkd3d_shader_signature *signature)
Type of vkd3d_shader_free_shader_signature().
Definition: vkd3d_shader.h:3501
vkd3d_shader_target_type
The output format of a compiled shader.
Definition: vkd3d_shader.h:1540
64-bit IEEE floating-point.
Definition: vkd3d_shader.h:2470
unsigned int option_count
Size, in elements, of options.
Definition: vkd3d_shader.h:1638
Describes the mapping of a output varying register in a shader stage, to an input varying register in...
Definition: vkd3d_shader.h:2760
End coordinate for linear fog.
Definition: vkd3d_shader.h:927
The descriptor is an unordered access view.
Definition: vkd3d_shader.h:460
Definition: vkd3d_shader.h:2113
enum vkd3d_shader_minimum_precision min_precision
Minimum interpolation precision.
Definition: vkd3d_shader.h:2590
The boolean constant register set, b# in Direct3D assembly.
Definition: vkd3d_shader.h:1224
vkd3d_shader_compile_option_backward_compatibility
Individual options to enable various backward compatibility features.
Definition: vkd3d_shader.h:199
Whether to use flat interpolation for fragment shader colour inputs.
Definition: vkd3d_shader.h:736
A single shader varying, returned as part of struct vkd3d_shader_signature.
Definition: vkd3d_shader.h:2560
1-dimensional array texture.
Definition: vkd3d_shader.h:2164
Ignore the checksum and continue parsing even if it is incorrect.
Definition: vkd3d_shader.h:282
unsigned int semantic_index
Semantic index, or 0 if the semantic is not indexed.
Definition: vkd3d_shader.h:2565
Scale value for fog.
Definition: vkd3d_shader.h:940
Vertex ID; SV_VertexID in Direct3D.
Definition: vkd3d_shader.h:2501
unsigned int flags
Bitwise combination of zero or more members of vkd3d_shader_descriptor_info_flag. ...
Definition: vkd3d_shader.h:2257
int(* PFN_vkd3d_shader_parse_dxbc)(const struct vkd3d_shader_code *dxbc, uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages)
Type of vkd3d_shader_parse_dxbc().
Definition: vkd3d_shader.h:3513
This structure describes a single resource-sampler pair.
Definition: vkd3d_shader.h:2319
The descriptor is a shader resource view.
Definition: vkd3d_shader.h:455
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2352
vkd3d_shader_compile_option_name
Definition: vkd3d_shader.h:287
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:1371
Legacy Direct3D byte-code.
Definition: vkd3d_shader.h:1561
Various settings which may affect shader compilation or scanning, passed as part of struct vkd3d_shad...
Definition: vkd3d_shader.h:393
vkd3d_shader_descriptor_info_flag
Additional flags describing a shader descriptor, returned as part of struct vkd3d_shader_descriptor_i...
Definition: vkd3d_shader.h:2214
Fog colour.
Definition: vkd3d_shader.h:914
The parameter is provided as a 32-bit unsigned integer.
Definition: vkd3d_shader.h:644
Clip distance; SV_ClipDistance in Direct3D.
Definition: vkd3d_shader.h:2493
unsigned int used_mask
Subset of mask which the shader reads from or writes to.
Definition: vkd3d_shader.h:2588
Use storage buffers for buffer UAVs.
Definition: vkd3d_shader.h:149
Definition: vkd3d_shader.h:2130
Definition: vkd3d_shader.h:1677
The SPIR-V target environment supports 64-bit floating-point types.
Definition: vkd3d_shader.h:255
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:3465
The resource is visible only to the domain shader.
Definition: vkd3d_shader.h:414
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...
const void * next
Optional pointer to a structure containing further parameters.
Definition: vkd3d_shader.h:2742
enum vkd3d_shader_structure_type type
Must be set to VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO.
Definition: vkd3d_shader.h:1610
unsigned int combined_sampler_count
Size, in elements, of combined_samplers.
Definition: vkd3d_shader.h:1386
The parameter value is provided to the shader as part of a uniform buffer.
Definition: vkd3d_shader.h:631
The structure is a vkd3d_shader_scan_descriptor_info structure.
Definition: vkd3d_shader.h:76
An individual shader parameter.
Definition: vkd3d_shader.h:1146
enum vkd3d_shader_resource_type texture_dimensions[6]
The dimension of each texture bound to the shader.
Definition: vkd3d_shader.h:2430
void(* PFN_vkd3d_shader_set_log_callback)(PFN_vkd3d_log callback)
Type of vkd3d_shader_set_log_callback().
Definition: vkd3d_shader.h:3508
struct vkd3d_shader_parameter_immediate_constant1 immediate_constant
Additional information if type is VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT. ...
Definition: vkd3d_shader.h:1192
The resource is visible only to the compute shader.
Definition: vkd3d_shader.h:421
const char * name
Pointer to a null-terminated string containing the name of a macro.
Definition: vkd3d_shader.h:1738
The structure is a vkd3d_shader_spirv_target_info structure.
Definition: vkd3d_shader.h:80