vkd3d 1.2
The vkd3d 3D Graphics Library
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Enumerations | Functions
vkd3d_shader.h File Reference
#include <stdbool.h>
#include <stdint.h>
#include <vkd3d_types.h>
Include dependency graph for vkd3d_shader.h:

Go to the source code of this file.

Data Structures

struct  vkd3d_shader_compile_option
 Various settings which may affect shader compilation or scanning, passed as part of struct vkd3d_shader_compile_info. More...
 
struct  vkd3d_shader_code
 A generic structure containing a GPU shader, in text or byte-code format. More...
 
struct  vkd3d_shader_descriptor_binding
 A common structure describing the bind point of a descriptor or descriptor array in the target environment. More...
 
struct  vkd3d_shader_parameter_immediate_constant
 
struct  vkd3d_shader_parameter_specialization_constant
 
struct  vkd3d_shader_parameter
 
struct  vkd3d_shader_resource_binding
 Describes the mapping of a single resource or resource array to its binding point in the target environment. More...
 
struct  vkd3d_shader_combined_resource_sampler
 Describes the mapping of a Direct3D resource-sampler pair to a combined sampler (i.e. More...
 
struct  vkd3d_shader_uav_counter_binding
 Describes the mapping of a single Direct3D UAV counter. More...
 
struct  vkd3d_shader_push_constant_buffer
 Describes the mapping of a Direct3D constant buffer to a range of push constants in the target environment. More...
 
struct  vkd3d_shader_interface_info
 A chained structure describing the interface between a compiled shader and the target environment. More...
 
struct  vkd3d_shader_transform_feedback_element
 
struct  vkd3d_shader_transform_feedback_info
 
struct  vkd3d_shader_compile_info
 A chained structure containing compilation parameters. More...
 
struct  vkd3d_shader_spirv_target_info
 
struct  vkd3d_shader_spirv_domain_shader_target_info
 
struct  vkd3d_shader_static_sampler_desc
 
struct  vkd3d_shader_descriptor_range
 
struct  vkd3d_shader_root_descriptor_table
 
struct  vkd3d_shader_root_constants
 
struct  vkd3d_shader_root_descriptor
 
struct  vkd3d_shader_root_parameter
 
struct  vkd3d_shader_root_signature_desc
 
struct  vkd3d_shader_descriptor_range1
 
struct  vkd3d_shader_root_descriptor_table1
 
struct  vkd3d_shader_root_descriptor1
 
struct  vkd3d_shader_root_parameter1
 
struct  vkd3d_shader_root_signature_desc1
 
struct  vkd3d_shader_versioned_root_signature_desc
 
struct  vkd3d_shader_descriptor_info
 Describes a single shader descriptor; returned as part of struct vkd3d_shader_scan_descriptor_info. More...
 
struct  vkd3d_shader_scan_descriptor_info
 A chained structure enumerating the descriptors declared by a shader. More...
 
struct  vkd3d_shader_signature_element
 A single shader varying, returned as part of struct vkd3d_shader_signature. More...
 
struct  vkd3d_shader_signature
 Description of a shader input or output signature. More...
 

Macros

#define VKD3D_SHADER_DUMMY_SAMPLER_INDEX   ~0u
 
#define VKD3D_SHADER_SWIZZLE_MASK   (0xffu)
 A mask selecting one component from a vkd3d-shader swizzle.
 
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx)   (8u * (idx))
 The offset, in bits, of the nth parameter of a vkd3d-shader swizzle.
 
#define VKD3D_SHADER_SWIZZLE(x, y, z, w)
 A helper macro which returns a vkd3d-shader swizzle with the given components.
 
#define VKD3D_SHADER_NO_SWIZZLE   VKD3D_SHADER_SWIZZLE(X, Y, Z, W)
 The identity swizzle ".xyzw".
 

Typedefs

typedef const char *(* PFN_vkd3d_shader_get_version) (unsigned int *major, unsigned int *minor)
 Type of vkd3d_shader_get_version().
 
typedef enum vkd3d_shader_source_type *(* PFN_vkd3d_shader_get_supported_source_types) (unsigned int *count)
 Type of vkd3d_shader_get_supported_source_types().
 
typedef enum vkd3d_shader_target_type *(* PFN_vkd3d_shader_get_supported_target_types) (enum vkd3d_shader_source_type source_type, unsigned int *count)
 Type of vkd3d_shader_get_supported_target_types().
 
typedef 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().
 
typedef void(* PFN_vkd3d_shader_free_messages) (char *messages)
 Type of vkd3d_shader_free_messages().
 
typedef void(* PFN_vkd3d_shader_free_shader_code) (struct vkd3d_shader_code *code)
 Type of vkd3d_shader_free_shader_code().
 
typedef 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().
 
typedef void(* PFN_vkd3d_shader_free_root_signature) (struct vkd3d_shader_versioned_root_signature_desc *root_signature)
 Type of vkd3d_shader_free_root_signature().
 
typedef 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().
 
typedef 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().
 
typedef int(* PFN_vkd3d_shader_scan) (const struct vkd3d_shader_compile_info *compile_info, char **messages)
 Type of vkd3d_shader_scan().
 
typedef 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().
 
typedef 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().
 
typedef struct vkd3d_shader_signature_element *(* PFN_vkd3d_shader_find_signature_element) (const struct vkd3d_shader_signature *signature, const char *semantic_name, unsigned int semantic_index, unsigned int stream_index)
 Type of vkd3d_shader_find_signature_element().
 
typedef void(* PFN_vkd3d_shader_free_shader_signature) (struct vkd3d_shader_signature *signature)
 Type of vkd3d_shader_free_shader_signature().
 

Enumerations

enum  vkd3d_shader_structure_type {
  VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO , VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO , VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO , VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_DOMAIN_SHADER_TARGET_INFO ,
  VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO , VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 The type of a chained structure. More...
 
enum  vkd3d_shader_compile_option_buffer_uav { VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER = 0x00000000 , VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_BUFFER = 0x00000001 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 Determines how buffer UAVs are stored. More...
 
enum  vkd3d_shader_compile_option_formatting_flags {
  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_NONE = 0x00000000 , VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR = 0x00000001 , VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT = 0x00000002 , VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS = 0x00000004 ,
  VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER = 0x00000008 , VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS = 0x00000010 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_compile_option_name { VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG = 0x00000001 , VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV = 0x00000002 , VKD3D_SHADER_COMPILE_OPTION_FORMATTING = 0x00000003 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_visibility {
  VKD3D_SHADER_VISIBILITY_ALL = 0 , VKD3D_SHADER_VISIBILITY_VERTEX = 1 , VKD3D_SHADER_VISIBILITY_HULL = 2 , VKD3D_SHADER_VISIBILITY_DOMAIN = 3 ,
  VKD3D_SHADER_VISIBILITY_GEOMETRY = 4 , VKD3D_SHADER_VISIBILITY_PIXEL = 5 , VKD3D_SHADER_VISIBILITY_COMPUTE = 1000000000 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 Describes which shader stages a resource is visible to. More...
 
enum  vkd3d_shader_descriptor_type { VKD3D_SHADER_DESCRIPTOR_TYPE_SRV = 0x0 , VKD3D_SHADER_DESCRIPTOR_TYPE_UAV = 0x1 , VKD3D_SHADER_DESCRIPTOR_TYPE_CBV = 0x2 , VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER = 0x3 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 The type of a shader resource descriptor. More...
 
enum  vkd3d_shader_binding_flag { VKD3D_SHADER_BINDING_FLAG_BUFFER = 0x00000001 , VKD3D_SHADER_BINDING_FLAG_IMAGE = 0x00000002 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_parameter_type { VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN , VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT , VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_parameter_data_type { VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN , VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_parameter_name { VKD3D_SHADER_PARAMETER_NAME_UNKNOWN , VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_source_type { VKD3D_SHADER_SOURCE_NONE , VKD3D_SHADER_SOURCE_DXBC_TPF , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 The format of a shader to be compiled or scanned. More...
 
enum  vkd3d_shader_target_type { VKD3D_SHADER_TARGET_NONE , VKD3D_SHADER_TARGET_SPIRV_BINARY , VKD3D_SHADER_TARGET_SPIRV_TEXT , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 The output format of a compiled shader. More...
 
enum  vkd3d_shader_log_level { VKD3D_SHADER_LOG_NONE , VKD3D_SHADER_LOG_ERROR , VKD3D_SHADER_LOG_WARNING , VKD3D_SHADER_LOG_INFO , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 Describes the minimum severity of compilation messages returned by vkd3d_shader_compile() and similar functions. More...
 
enum  vkd3d_shader_spirv_environment { VKD3D_SHADER_SPIRV_ENVIRONMENT_NONE , VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5 , VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_spirv_extension { VKD3D_SHADER_SPIRV_EXTENSION_NONE , VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_tessellator_output_primitive { VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT = 0x1 , VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE = 0x2 , VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW = 0x3 , VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 0x4 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_tessellator_partitioning { VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER = 0x1 , VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2 = 0x2 , VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 0x3 , VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 0x4 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_filter {
  VKD3D_SHADER_FILTER_MIN_MAG_MIP_POINT = 0x000 , VKD3D_SHADER_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x001 , VKD3D_SHADER_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x004 , VKD3D_SHADER_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x005 ,
  VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x010 , VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x011 , VKD3D_SHADER_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x014 , VKD3D_SHADER_FILTER_MIN_MAG_MIP_LINEAR = 0x015 ,
  VKD3D_SHADER_FILTER_ANISOTROPIC = 0x055 , VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x080 , VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x081 , VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x084 ,
  VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x085 , VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x090 , VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x091 , VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x094 ,
  VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x095 , VKD3D_SHADER_FILTER_COMPARISON_ANISOTROPIC = 0x0d5 , VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100 , VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101 ,
  VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104 , VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105 , VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110 , VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111 ,
  VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114 , VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115 , VKD3D_SHADER_FILTER_MINIMUM_ANISOTROPIC = 0x155 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180 ,
  VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190 ,
  VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194 , VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195 , VKD3D_SHADER_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_texture_address_mode {
  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_WRAP = 0x1 , VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR = 0x2 , VKD3D_SHADER_TEXTURE_ADDRESS_MODE_CLAMP = 0x3 , VKD3D_SHADER_TEXTURE_ADDRESS_MODE_BORDER = 0x4 ,
  VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 0x5 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_comparison_func {
  VKD3D_SHADER_COMPARISON_FUNC_NEVER = 0x1 , VKD3D_SHADER_COMPARISON_FUNC_LESS = 0x2 , VKD3D_SHADER_COMPARISON_FUNC_EQUAL = 0x3 , VKD3D_SHADER_COMPARISON_FUNC_LESS_EQUAL = 0x4 ,
  VKD3D_SHADER_COMPARISON_FUNC_GREATER = 0x5 , VKD3D_SHADER_COMPARISON_FUNC_NOT_EQUAL = 0x6 , VKD3D_SHADER_COMPARISON_FUNC_GREATER_EQUAL = 0x7 , VKD3D_SHADER_COMPARISON_FUNC_ALWAYS = 0x8 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_static_border_colour { VKD3D_SHADER_STATIC_BORDER_COLOUR_TRANSPARENT_BLACK = 0x0 , VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_BLACK = 0x1 , VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_WHITE = 0x2 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_root_parameter_type {
  VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0x0 , VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 0x1 , VKD3D_SHADER_ROOT_PARAMETER_TYPE_CBV = 0x2 , VKD3D_SHADER_ROOT_PARAMETER_TYPE_SRV = 0x3 ,
  VKD3D_SHADER_ROOT_PARAMETER_TYPE_UAV = 0x4 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_root_signature_flags {
  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_NONE = 0x00 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04 ,
  VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20 , VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_root_descriptor_flags { VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_NONE = 0x0 , VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2 , VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4 , VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_descriptor_range_flags {
  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_NONE = 0x0 , VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1 , VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2 , VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4 ,
  VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 
enum  vkd3d_shader_root_signature_version { VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0 = 0x1 , VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1 = 0x2 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 
enum  vkd3d_shader_resource_type {
  VKD3D_SHADER_RESOURCE_NONE = 0x0 , VKD3D_SHADER_RESOURCE_BUFFER = 0x1 , VKD3D_SHADER_RESOURCE_TEXTURE_1D = 0x2 , VKD3D_SHADER_RESOURCE_TEXTURE_2D = 0x3 ,
  VKD3D_SHADER_RESOURCE_TEXTURE_2DMS = 0x4 , VKD3D_SHADER_RESOURCE_TEXTURE_3D = 0x5 , VKD3D_SHADER_RESOURCE_TEXTURE_CUBE = 0x6 , VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY = 0x7 ,
  VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY = 0x8 , VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY = 0x9 , VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY = 0xa , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 The type of a shader resource, returned as part of struct vkd3d_shader_descriptor_info. More...
 
enum  vkd3d_shader_resource_data_type {
  VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1 , VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2 , VKD3D_SHADER_RESOURCE_DATA_INT = 0x3 , VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4 ,
  VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 The type of the data contained in a shader resource, returned as part of struct vkd3d_shader_descriptor_info. More...
 
enum  vkd3d_shader_descriptor_info_flag { VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER = 0x00000001 , VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ = 0x00000002 , VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE = 0x00000004 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 Additional flags describing a shader descriptor, returned as part of struct vkd3d_shader_descriptor_info. More...
 
enum  vkd3d_shader_component_type {
  VKD3D_SHADER_COMPONENT_VOID = 0x0 , VKD3D_SHADER_COMPONENT_UINT = 0x1 , VKD3D_SHADER_COMPONENT_INT = 0x2 , VKD3D_SHADER_COMPONENT_FLOAT = 0x3 ,
  VKD3D_SHADER_COMPONENT_BOOL = 0x4 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 Data type of a shader varying, returned as part of struct vkd3d_shader_signature_element. More...
 
enum  vkd3d_shader_sysval_semantic {
  VKD3D_SHADER_SV_NONE = 0x00 , VKD3D_SHADER_SV_POSITION = 0x01 , VKD3D_SHADER_SV_CLIP_DISTANCE = 0x02 , VKD3D_SHADER_SV_CULL_DISTANCE = 0x03 ,
  VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX = 0x04 , VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX = 0x05 , VKD3D_SHADER_SV_VERTEX_ID = 0x06 , VKD3D_SHADER_SV_PRIMITIVE_ID = 0x07 ,
  VKD3D_SHADER_SV_INSTANCE_ID = 0x08 , VKD3D_SHADER_SV_IS_FRONT_FACE = 0x09 , VKD3D_SHADER_SV_SAMPLE_INDEX = 0x0a , VKD3D_SHADER_SV_TESS_FACTOR_QUADEDGE = 0x0b ,
  VKD3D_SHADER_SV_TESS_FACTOR_QUADINT = 0x0c , VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE = 0x0d , VKD3D_SHADER_SV_TESS_FACTOR_TRIINT = 0x0e , VKD3D_SHADER_SV_TESS_FACTOR_LINEDET = 0x0f ,
  VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN = 0x10 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 System value semantic, returned as part of struct vkd3d_shader_signature. More...
 
enum  vkd3d_shader_minimum_precision {
  VKD3D_SHADER_MINIMUM_PRECISION_NONE = 0 , VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16 = 1 , VKD3D_SHADER_MINIMUM_PRECISION_FIXED_8_2 = 2 , VKD3D_SHADER_MINIMUM_PRECISION_INT_16 = 4 ,
  VKD3D_SHADER_MINIMUM_PRECISION_UINT_16 = 5 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE)
}
 Minimum interpolation precision of a shader varying, returned as part of struct vkd3d_shader_signature_element. More...
 
enum  vkd3d_shader_swizzle_component { VKD3D_SHADER_SWIZZLE_X = 0x0 , VKD3D_SHADER_SWIZZLE_Y = 0x1 , VKD3D_SHADER_SWIZZLE_Z = 0x2 , VKD3D_SHADER_SWIZZLE_W = 0x3 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_STRUCTURE_TYPE) }
 Possible values for a single component of a vkd3d-shader swizzle.
 

Functions

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.
 
const char * vkd3d_shader_get_version (unsigned int *major, unsigned int *minor)
 Returns the current version of this library.
 
enum vkd3d_shader_source_typevkd3d_shader_get_supported_source_types (unsigned int *count)
 Returns the source types supported, with any target type, by vkd3d_shader_compile().
 
enum vkd3d_shader_target_typevkd3d_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().
 
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.
 
void vkd3d_shader_free_messages (char *messages)
 Free shader messages allocated by another vkd3d-shader function, such as vkd3d_shader_compile().
 
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().
 
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 easily parsed by C code.
 
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_signature() or vkd3d_shader_parse_root_signature().
 
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 read by ID3D12Device::CreateRootSignature.
 
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 representation.
 
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.
 
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().
 
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 parsed by C code.
 
struct vkd3d_shader_signature_elementvkd3d_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.
 
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_signature().
 

Detailed Description

Since
1.2

This file contains definitions for the vkd3d-shader library.

The vkd3d-shader library provides multiple utilities related to the compilation, transformation, and reflection of GPU shaders.

Macro Definition Documentation

◆ VKD3D_SHADER_SWIZZLE

#define VKD3D_SHADER_SWIZZLE (   x,
  y,
  z,
 
)
Value:
vkd3d_shader_create_swizzle(VKD3D_SHADER_SWIZZLE_ ## x, \
VKD3D_SHADER_SWIZZLE_ ## y, \
VKD3D_SHADER_SWIZZLE_ ## z, \
VKD3D_SHADER_SWIZZLE_ ## w)
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:1143

A helper macro which returns a vkd3d-shader swizzle with the given components.

The components are specified as the suffixes to members of vkd3d_shader_swizzle_component. For example, the swizzle ".xwyy" can be represented as:

#define VKD3D_SHADER_SWIZZLE(x, y, z, w)
A helper macro which returns a vkd3d-shader swizzle with the given components.
Definition vkd3d_shader.h:1133

◆ VKD3D_SHADER_SWIZZLE_MASK

#define VKD3D_SHADER_SWIZZLE_MASK   (0xffu)

A mask selecting one component from a vkd3d-shader swizzle.

The component has type vkd3d_shader_swizzle_component.

Enumeration Type Documentation

◆ vkd3d_shader_compile_option_buffer_uav

Determines how buffer UAVs are stored.

This also affects UAV counters in Vulkan environments. In OpenGL environments, atomic counter buffers are always used for UAV counters.

Enumerator
VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER 

Use buffer textures for buffer UAVs.

This is the default value.

VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_BUFFER 

Use storage buffers for buffer UAVs.

◆ vkd3d_shader_compile_option_name

Enumerator
VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG 

If value is nonzero, do not include debug information in the compiled shader.

The default value is zero.

This option is supported by vkd3d_shader_compile(). However, not all compilers support generating debug information.

VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV 

value is a member of enum vkd3d_shader_compile_option_buffer_uav.

VKD3D_SHADER_COMPILE_OPTION_FORMATTING 

value is a member of enum vkd3d_shader_compile_option_formatting_flags.

◆ vkd3d_shader_component_type

Data type of a shader varying, returned as part of struct vkd3d_shader_signature_element.

Enumerator
VKD3D_SHADER_COMPONENT_VOID 

The varying has no type.

VKD3D_SHADER_COMPONENT_UINT 

32-bit unsigned integer.

VKD3D_SHADER_COMPONENT_INT 

32-bit signed integer.

VKD3D_SHADER_COMPONENT_FLOAT 

32-bit IEEE floating-point.

VKD3D_SHADER_COMPONENT_BOOL 

Boolean.

◆ vkd3d_shader_descriptor_info_flag

Additional flags describing a shader descriptor, returned as part of struct vkd3d_shader_descriptor_info.

Enumerator
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER 

The descriptor is a UAV resource, whose counter is read from or written to by the shader.

VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ 

The descriptor is a UAV resource, which is read from by the shader.

VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE 

The descriptor is a comparison sampler.

◆ vkd3d_shader_descriptor_type

The type of a shader resource descriptor.

Enumerator
VKD3D_SHADER_DESCRIPTOR_TYPE_SRV 

The descriptor is a shader resource view.

In Direct3D assembly, this is bound to a t# register.

VKD3D_SHADER_DESCRIPTOR_TYPE_UAV 

The descriptor is an unordered access view.

In Direct3D assembly, this is bound to a u# register.

VKD3D_SHADER_DESCRIPTOR_TYPE_CBV 

The descriptor is a constant buffer view.

In Direct3D assembly, this is bound to a cb# register.

VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER 

The descriptor is a sampler.

In Direct3D assembly, this is bound to an s# register.

◆ vkd3d_shader_log_level

Describes the minimum severity of compilation messages returned by vkd3d_shader_compile() and similar functions.

Enumerator
VKD3D_SHADER_LOG_NONE 

No messages will be returned.

VKD3D_SHADER_LOG_ERROR 

Only fatal errors which prevent successful compilation will be returned.

VKD3D_SHADER_LOG_WARNING 

Non-fatal warnings and fatal errors will be returned.

VKD3D_SHADER_LOG_INFO 

All messages, including general informational messages, will be returned.

◆ vkd3d_shader_minimum_precision

Minimum interpolation precision of a shader varying, returned as part of struct vkd3d_shader_signature_element.

Enumerator
VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16 

16-bit floating-point.

VKD3D_SHADER_MINIMUM_PRECISION_FIXED_8_2 

10-bit fixed point (2 integer and 8 fractional bits).

VKD3D_SHADER_MINIMUM_PRECISION_INT_16 

16-bit signed integer.

VKD3D_SHADER_MINIMUM_PRECISION_UINT_16 

16-bit unsigned integer.

◆ vkd3d_shader_resource_data_type

The type of the data contained in a shader resource, returned as part of struct vkd3d_shader_descriptor_info.

All formats are 32-bit.

Enumerator
VKD3D_SHADER_RESOURCE_DATA_UNORM 

Unsigned normalized integer.

VKD3D_SHADER_RESOURCE_DATA_SNORM 

Signed normalized integer.

VKD3D_SHADER_RESOURCE_DATA_INT 

Signed integer.

VKD3D_SHADER_RESOURCE_DATA_UINT 

Unsigned integer.

VKD3D_SHADER_RESOURCE_DATA_FLOAT 

IEEE floating-point.

◆ vkd3d_shader_resource_type

The type of a shader resource, returned as part of struct vkd3d_shader_descriptor_info.

Enumerator
VKD3D_SHADER_RESOURCE_NONE 

The type is invalid or not applicable for this descriptor.

This value is returned for samplers.

VKD3D_SHADER_RESOURCE_BUFFER 

Dimensionless buffer.

VKD3D_SHADER_RESOURCE_TEXTURE_1D 

1-dimensional texture.

VKD3D_SHADER_RESOURCE_TEXTURE_2D 

2-dimensional texture.

VKD3D_SHADER_RESOURCE_TEXTURE_2DMS 

Multisampled 2-dimensional texture.

VKD3D_SHADER_RESOURCE_TEXTURE_3D 

3-dimensional texture.

VKD3D_SHADER_RESOURCE_TEXTURE_CUBE 

Cubemap texture.

VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY 

1-dimensional array texture.

VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY 

2-dimensional array texture.

VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY 

Multisampled 2-dimensional array texture.

VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY 

Cubemap array texture.

◆ vkd3d_shader_source_type

The format of a shader to be compiled or scanned.

Enumerator
VKD3D_SHADER_SOURCE_NONE 

The shader has no type or is to be ignored.

This is not a valid value for vkd3d_shader_compile() or vkd3d_shader_scan().

VKD3D_SHADER_SOURCE_DXBC_TPF 

A 'Tokenized Program Format' shader embedded in a DXBC container.

This is the format used for Direct3D shader model 4 and 5 shaders.

◆ vkd3d_shader_structure_type

The type of a chained structure.

Enumerator
VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO 

The structure is a vkd3d_shader_compile_info structure.

VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO 

The structure is a vkd3d_shader_interface_info structure.

VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO 

The structure is a vkd3d_shader_scan_descriptor_info structure.

VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_DOMAIN_SHADER_TARGET_INFO 

The structure is a vkd3d_shader_spirv_domain_shader_target_info structure.

VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO 

The structure is a vkd3d_shader_spirv_target_info structure.

VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO 

The structure is a vkd3d_shader_transform_feedback_info structure.

◆ vkd3d_shader_sysval_semantic

System value semantic, returned as part of struct vkd3d_shader_signature.

Enumerator
VKD3D_SHADER_SV_NONE 

No system value.

VKD3D_SHADER_SV_POSITION 

Vertex position; SV_Position in Direct3D.

VKD3D_SHADER_SV_CLIP_DISTANCE 

Clip distance; SV_ClipDistance in Direct3D.

VKD3D_SHADER_SV_CULL_DISTANCE 

Cull distance; SV_CullDistance in Direct3D.

VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX 

Render target layer; SV_RenderTargetArrayIndex in Direct3D.

VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX 

Viewport index; SV_ViewportArrayIndex in Direct3D.

VKD3D_SHADER_SV_VERTEX_ID 

Vertex ID; SV_VertexID in Direct3D.

VKD3D_SHADER_SV_PRIMITIVE_ID 

Primtive ID; SV_PrimitiveID in Direct3D.

VKD3D_SHADER_SV_INSTANCE_ID 

Instance ID; SV_InstanceID in Direct3D.

VKD3D_SHADER_SV_IS_FRONT_FACE 

Whether the triangle is front-facing; SV_IsFrontFace in Direct3D.

VKD3D_SHADER_SV_SAMPLE_INDEX 

Sample index; SV_SampleIndex in Direct3D.

◆ vkd3d_shader_target_type

The output format of a compiled shader.

Enumerator
VKD3D_SHADER_TARGET_NONE 

The shader has no type or is to be ignored.

This is not a valid value for vkd3d_shader_compile() or vkd3d_shader_scan().

VKD3D_SHADER_TARGET_SPIRV_BINARY 

A SPIR-V shader in binary form.

This is the format used for Vulkan shaders.

◆ vkd3d_shader_visibility

Describes which shader stages a resource is visible to.

Enumerator
VKD3D_SHADER_VISIBILITY_ALL 

The resource is visible to all shader stages.

VKD3D_SHADER_VISIBILITY_VERTEX 

The resource is visible only to the vertex shader.

VKD3D_SHADER_VISIBILITY_HULL 

The resource is visible only to the hull shader.

VKD3D_SHADER_VISIBILITY_DOMAIN 

The resource is visible only to the domain shader.

VKD3D_SHADER_VISIBILITY_GEOMETRY 

The resource is visible only to the geometry shader.

VKD3D_SHADER_VISIBILITY_PIXEL 

The resource is visible only to the pixel shader.

VKD3D_SHADER_VISIBILITY_COMPUTE 

The resource is visible only to the compute shader.

Function Documentation

◆ vkd3d_shader_compile()

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.

This version of vkd3d-shader supports the following transformations:

  • VKD3D_SHADER_SOURCE_DXBC_TPF to VKD3D_SHADER_TARGET_SPIRV_BINARY

Supported transformations can also be detected at runtime with the functions vkd3d_shader_get_supported_source_types() and vkd3d_shader_get_supported_target_types().

Depending on the source and target types, this function may support the following chained structures:

Parameters
compile_infoA chained structure containing compilation parameters.
outA pointer to a vkd3d_shader_code structure in which the compiled code will be stored.
The compiled shader is allocated by vkd3d-shader and should be freed with vkd3d_shader_free_shader_code() when no longer needed.
messagesOptional output location for error or informational messages produced by the compiler.
This string is null-terminated and UTF-8 encoded.
The messages are allocated by vkd3d-shader and should be freed with vkd3d_shader_free_messages() when no longer needed.
The messages returned can be regulated with the log_level member of struct vkd3d_shader_compile_info. Regardless of the requested level, if this parameter is NULL, no compilation messages will be returned.
If no compilation messages are produced by the compiler, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

◆ vkd3d_shader_convert_root_signature()

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 representation.

This function corresponds to ID3D12VersionedRootSignatureDeserializer::GetRootSignatureDescAtVersion().

Parameters
dstA pointer to a vkd3d_shader_versioned_root_signature_desc structure in which the converted signature will be stored.
Members of dst may be allocated by vkd3d-shader. The signature should be freed with vkd3d_shader_free_root_signature() when no longer needed.
versionThe desired version to convert src to. This version must not be equal to src->version.
srcInput root signature description.
Returns
A member of vkd3d_result.

◆ vkd3d_shader_find_signature_element()

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.

Parameters
signatureThe parsed input signature. This structure is normally populated by vkd3d_shader_parse_input_signature().
semantic_nameSemantic name of the desired element. This function performs a case-insensitive comparison with respect to the ASCII plane.
semantic_indexSemantic index of the desired element.
stream_indexGeometry shader stream index of the desired element. If the signature is not a geometry shader output signature, this parameter must be set to 0.
Returns
A description of the element matching the requested parameters, or NULL if no such element was found. If not NULL, the return value points into the signature parameter and should not be explicitly freed.

◆ vkd3d_shader_free_messages()

void vkd3d_shader_free_messages ( char *  messages)

Free shader messages allocated by another vkd3d-shader function, such as vkd3d_shader_compile().

Parameters
messagesMessages to free. This pointer is optional and may be NULL, in which case no action will be taken.

◆ vkd3d_shader_free_root_signature()

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_signature() or vkd3d_shader_parse_root_signature().

This function may free members of struct vkd3d_shader_versioned_root_signature_desc, but does not free the structure itself.

Parameters
root_signatureSignature description to free.

◆ vkd3d_shader_free_scan_descriptor_info()

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().

This function may free members of vkd3d_shader_scan_descriptor_info, but does not free the structure itself.

Parameters
scan_descriptor_infoDescriptor information to free.

◆ vkd3d_shader_free_shader_code()

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().

This function frees the vkd3d_shader_code::code member, but does not free the structure itself.

Parameters
codeCode to free.

◆ vkd3d_shader_free_shader_signature()

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_signature().

This function may free members of struct vkd3d_shader_signature, but does not free the structure itself.

Parameters
signatureSignature description to free.

◆ vkd3d_shader_get_supported_source_types()

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().

Use vkd3d_shader_get_supported_target_types() to determine which target types are supported for each source type.

Parameters
countOutput location for the size, in elements, of the returned array.
Returns
Pointer to an array of source types supported by this version of vkd3d-shader. This array may be a pointer to static data in libvkd3d-shader; it should not be freed.

◆ vkd3d_shader_get_supported_target_types()

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().

Parameters
source_typeSource type for which to enumerate supported target types.
countOutput location for the size, in elements, of the returned array.
Returns
Pointer to an array of target types supported by this version of vkd3d-shader. This array may be a pointer to static data in libvkd3d-shader; it should not be freed.

◆ vkd3d_shader_get_version()

const char * vkd3d_shader_get_version ( unsigned int *  major,
unsigned int *  minor 
)

Returns the current version of this library.

Parameters
majorOutput location for the major version of this library.
minorOutput location for the minor version of this library.
Returns
A human-readable string describing the library name and version. This string is null-terminated and UTF-8 encoded. This may be a pointer to static data in libvkd3d-shader; it should not be freed.

◆ vkd3d_shader_parse_input_signature()

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 parsed by C code.

This function parses a compiled shader. To parse a standalone root signature, use vkd3d_shader_parse_root_signature().

Parameters
dxbcCompiled byte code, in DXBC format.
signatureOutput location in which the parsed root signature will be stored.
Members of signature may be allocated by vkd3d-shader. The signature should be freed with vkd3d_shader_free_shader_signature() when no longer needed.
messagesOptional output location for error or informational messages produced by the compiler.
This parameter behaves identically to the messages parameter of vkd3d_shader_compile().
Returns
A member of vkd3d_result.

◆ vkd3d_shader_parse_root_signature()

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 easily parsed by C code.

This function corresponds to ID3D12VersionedRootSignatureDeserializer::GetUnconvertedRootSignatureDesc().

This function performs the reverse transformation of vkd3d_shader_serialize_root_signature().

This function parses a standalone root signature, and should not be confused with vkd3d_shader_parse_input_signature().

Parameters
dxbcCompiled byte code, in DXBC format.
root_signatureOutput location in which the decompiled root signature will be stored.
Members of root_signature may be allocated by vkd3d-shader. The signature should be freed with vkd3d_shader_free_root_signature() when no longer needed.
messagesOptional output location for error or informational messages produced by the compiler.
This parameter behaves identically to the messages parameter of vkd3d_shader_compile().
Returns
A member of vkd3d_result.

◆ vkd3d_shader_scan()

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.

Currently this function supports the following code types:

  • VKD3D_SHADER_SOURCE_DXBC_TPF
Parameters
compile_infoA chained structure containing scan parameters.
The DXBC_TPF scanner supports the following chained structures:
  • vkd3d_shader_scan_descriptor_info
    Although the compile_info parameter is read-only, chained structures passed to this function need not be, and may serve as output parameters, depending on their structure type.
messagesOptional output location for error or informational messages produced by the compiler.
This parameter behaves identically to the messages parameter of vkd3d_shader_compile().
Returns
A member of vkd3d_result.

◆ vkd3d_shader_serialize_root_signature()

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 read by ID3D12Device::CreateRootSignature.

The compiled signature is compatible with Microsoft D3D 12.

This function corresponds to D3D12SerializeVersionedRootSignature().

Parameters
root_signatureDescription of the root signature.
dxbcA pointer to a vkd3d_shader_code structure in which the compiled code will be stored.
The compiled signature is allocated by vkd3d-shader and should be freed with vkd3d_shader_free_shader_code() when no longer needed.
messagesOptional output location for error or informational messages produced by the compiler.
This parameter behaves identically to the messages parameter of vkd3d_shader_compile().
Returns
A member of vkd3d_result.