ReactOS 0.4.17-dev-934-g091855f
vkd3d_shader.h File Reference
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <vkd3d_types.h>
Include dependency graph for vkd3d_shader.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  vkd3d_shader_compile_option
 
struct  vkd3d_shader_code
 
struct  vkd3d_shader_descriptor_binding
 
struct  vkd3d_shader_parameter_immediate_constant
 
struct  vkd3d_shader_parameter_immediate_constant1
 
struct  vkd3d_shader_parameter_specialization_constant
 
struct  vkd3d_shader_parameter_buffer
 
struct  vkd3d_shader_parameter
 
struct  vkd3d_shader_parameter1
 
struct  vkd3d_shader_resource_binding
 
struct  vkd3d_shader_combined_resource_sampler
 
struct  vkd3d_shader_uav_counter_binding
 
struct  vkd3d_shader_push_constant_buffer
 
struct  vkd3d_shader_interface_info
 
struct  vkd3d_shader_transform_feedback_element
 
struct  vkd3d_shader_transform_feedback_info
 
struct  vkd3d_shader_descriptor_offset
 
struct  vkd3d_shader_descriptor_offset_info
 
struct  vkd3d_shader_compile_info
 
struct  vkd3d_shader_spirv_target_info
 
struct  vkd3d_shader_spirv_domain_shader_target_info
 
struct  vkd3d_shader_macro
 
struct  vkd3d_shader_preprocess_info
 
struct  vkd3d_shader_hlsl_source_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
 
struct  vkd3d_shader_scan_descriptor_info
 
struct  vkd3d_shader_combined_resource_sampler_info
 
struct  vkd3d_shader_scan_combined_resource_sampler_info
 
struct  vkd3d_shader_signature_element
 
struct  vkd3d_shader_signature
 
struct  vkd3d_shader_dxbc_section_desc
 
struct  vkd3d_shader_dxbc_desc
 
struct  vkd3d_shader_scan_signature_info
 
struct  vkd3d_shader_varying_map
 
struct  vkd3d_shader_varying_map_info
 
struct  vkd3d_shader_parameter_info
 

Macros

#define VKD3D_SHADER_DUMMY_SAMPLER_INDEX   ~0u
 
#define VKD3D_SHADER_SWIZZLE_MASK   (0xffu)
 
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx)   (8u * (idx))
 
#define VKD3D_SHADER_SWIZZLE(x, y, z, w)
 
#define VKD3D_SHADER_NO_SWIZZLE   VKD3D_SHADER_SWIZZLE(X, Y, Z, W)
 
#define VKD3D_SHADER_API   VKD3D_IMPORT
 

Typedefs

typedef int(* PFN_vkd3d_shader_open_include) (const char *filename, bool local, const char *parent_data, void *context, struct vkd3d_shader_code *out)
 
typedef void(* PFN_vkd3d_shader_close_include) (const struct vkd3d_shader_code *code, void *context)
 
typedef const char *(* PFN_vkd3d_shader_get_version) (unsigned int *major, unsigned int *minor)
 
typedef enum vkd3d_shader_source_type *(* PFN_vkd3d_shader_get_supported_source_types) (unsigned int *count)
 
typedef enum vkd3d_shader_target_type *(* PFN_vkd3d_shader_get_supported_target_types) (enum vkd3d_shader_source_type source_type, unsigned int *count)
 
typedef int(* PFN_vkd3d_shader_compile) (const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
 
typedef void(* PFN_vkd3d_shader_free_messages) (char *messages)
 
typedef void(* PFN_vkd3d_shader_free_shader_code) (struct vkd3d_shader_code *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)
 
typedef void(* PFN_vkd3d_shader_free_root_signature) (struct vkd3d_shader_versioned_root_signature_desc *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)
 
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)
 
typedef int(* PFN_vkd3d_shader_scan) (const struct vkd3d_shader_compile_info *compile_info, char **messages)
 
typedef void(* PFN_vkd3d_shader_free_scan_descriptor_info) (struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
 
typedef int(* PFN_vkd3d_shader_parse_input_signature) (const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
 
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)
 
typedef void(* PFN_vkd3d_shader_free_shader_signature) (struct vkd3d_shader_signature *signature)
 
typedef void(* PFN_vkd3d_shader_preprocess) (struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
 
typedef void(* PFN_vkd3d_shader_set_log_callback) (PFN_vkd3d_log callback)
 
typedef void(* PFN_vkd3d_shader_free_dxbc) (struct vkd3d_shader_dxbc_desc *dxbc)
 
typedef int(* PFN_vkd3d_shader_parse_dxbc) (const struct vkd3d_shader_code *dxbc, uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages)
 
typedef 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)
 
typedef 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)
 
typedef void(* PFN_vkd3d_shader_free_scan_signature_info) (struct vkd3d_shader_scan_signature_info *info)
 
typedef void(* PFN_vkd3d_shader_free_scan_combined_resource_sampler_info) (struct vkd3d_shader_scan_combined_resource_sampler_info *info)
 

Enumerations

enum  vkd3d_shader_api_version {
  VKD3D_SHADER_API_VERSION_1_0 , VKD3D_SHADER_API_VERSION_1_1 , VKD3D_SHADER_API_VERSION_1_2 , VKD3D_SHADER_API_VERSION_1_3 ,
  VKD3D_SHADER_API_VERSION_1_4 , VKD3D_SHADER_API_VERSION_1_5 , VKD3D_SHADER_API_VERSION_1_6 , VKD3D_SHADER_API_VERSION_1_7 ,
  VKD3D_SHADER_API_VERSION_1_8 , VKD3D_SHADER_API_VERSION_1_9 , VKD3D_SHADER_API_VERSION_1_10 , VKD3D_SHADER_API_VERSION_1_11 ,
  VKD3D_SHADER_API_VERSION_1_12 , VKD3D_SHADER_API_VERSION_1_13 , VKD3D_SHADER_API_VERSION_1_14 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO , VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO ,
  VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO , VKD3D_SHADER_STRUCTURE_TYPE_SCAN_SIGNATURE_INFO , VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_INFO , VKD3D_SHADER_STRUCTURE_TYPE_SCAN_COMBINED_RESOURCE_SAMPLER_INFO ,
  VKD3D_SHADER_STRUCTURE_TYPE_PARAMETER_INFO , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION) }
 
enum  vkd3d_shader_compile_option_typed_uav { VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_R32 = 0x00000000 , VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_UNKNOWN = 0x00000001 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
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_SHADER_COMPILE_OPTION_FORMATTING_IO_SIGNATURES = 0x00000020 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_compile_option_pack_matrix_order { VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ROW_MAJOR = 0x00000001 , VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_COLUMN_MAJOR = 0x00000002 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
enum  vkd3d_shader_compile_option_backward_compatibility { VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES = 0x00000001 , VKD3D_SHADER_COMPILE_OPTION_DOUBLE_AS_FLOAT_ALIAS = 0x00000002 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
enum  vkd3d_shader_compile_option_fragment_coordinate_origin { VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_UPPER_LEFT = 0x00000000 , VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT = 0x00000001 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
enum  vkd3d_shader_compile_option_feature_flags { VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64 = 0x00000001 , VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64 = 0x00000002 , VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS = 0x00000004 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
enum  vkd3d_shader_parse_dxbc_flags { VKD3D_SHADER_PARSE_DXBC_IGNORE_CHECKSUM = 0x00000001 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
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_SHADER_COMPILE_OPTION_API_VERSION = 0x00000004 ,
  VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV = 0x00000005 , VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE = 0x00000006 , VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER = 0x00000007 , VKD3D_SHADER_COMPILE_OPTION_BACKWARD_COMPATIBILITY = 0x00000008 ,
  VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN = 0x00000009 , VKD3D_SHADER_COMPILE_OPTION_FEATURE = 0x0000000a , VKD3D_SHADER_COMPILE_OPTION_CHILD_EFFECT = 0x0000000b , VKD3D_SHADER_COMPILE_OPTION_WARN_IMPLICIT_TRUNCATION = 0x0000000c ,
  VKD3D_SHADER_COMPILE_OPTION_INCLUDE_EMPTY_BUFFERS_IN_EFFECTS = 0x0000000d , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
enum  vkd3d_shader_binding_flag { VKD3D_SHADER_BINDING_FLAG_BUFFER = 0x00000001 , VKD3D_SHADER_BINDING_FLAG_IMAGE = 0x00000002 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION) }
 
enum  vkd3d_shader_parameter_type {
  VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN , VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT , VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT , VKD3D_SHADER_PARAMETER_TYPE_BUFFER ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_parameter_data_type {
  VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN , VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32 , VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32 , VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_parameter_name {
  VKD3D_SHADER_PARAMETER_NAME_UNKNOWN , VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT , VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC , VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF ,
  VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0 , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_1 ,
  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_2 , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_3 , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_4 , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_5 ,
  VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_6 , VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_7 , VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE , VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN ,
  VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MAX , VKD3D_SHADER_PARAMETER_NAME_POINT_SPRITE , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_d3dbc_constant_register { VKD3D_SHADER_D3DBC_FLOAT_CONSTANT_REGISTER = 0x0 , VKD3D_SHADER_D3DBC_INT_CONSTANT_REGISTER = 0x1 , VKD3D_SHADER_D3DBC_BOOL_CONSTANT_REGISTER = 0x2 }
 
enum  vkd3d_shader_source_type {
  VKD3D_SHADER_SOURCE_NONE , VKD3D_SHADER_SOURCE_DXBC_TPF , VKD3D_SHADER_SOURCE_HLSL , VKD3D_SHADER_SOURCE_D3D_BYTECODE ,
  VKD3D_SHADER_SOURCE_DXBC_DXIL , VKD3D_SHADER_SOURCE_FX , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_target_type {
  VKD3D_SHADER_TARGET_NONE , VKD3D_SHADER_TARGET_SPIRV_BINARY , VKD3D_SHADER_TARGET_SPIRV_TEXT , VKD3D_SHADER_TARGET_D3D_ASM ,
  VKD3D_SHADER_TARGET_D3D_BYTECODE , VKD3D_SHADER_TARGET_DXBC_TPF , VKD3D_SHADER_TARGET_GLSL , VKD3D_SHADER_TARGET_FX ,
  VKD3D_SHADER_TARGET_MSL , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION)
}
 
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_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
enum  vkd3d_shader_spirv_extension {
  VKD3D_SHADER_SPIRV_EXTENSION_NONE , VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION , VKD3D_SHADER_SPIRV_EXTENSION_EXT_DESCRIPTOR_INDEXING , VKD3D_SHADER_SPIRV_EXTENSION_EXT_STENCIL_EXPORT ,
  VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER , VKD3D_SHADER_SPIRV_EXTENSION_EXT_FRAGMENT_SHADER_INTERLOCK , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION) }
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 
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_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION) }
 
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_API_VERSION)
}
 
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_SHADER_RESOURCE_DATA_MIXED = 0x6 , VKD3D_SHADER_RESOURCE_DATA_DOUBLE = 0x7 , VKD3D_SHADER_RESOURCE_DATA_CONTINUED = 0x8 ,
  VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_SHADER_DESCRIPTOR_INFO_FLAG_UAV_ATOMICS = 0x00000008 ,
  VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER = 0x00000010 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_SHADER_COMPONENT_DOUBLE = 0x5 , VKD3D_SHADER_COMPONENT_UINT64 = 0x6 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_SHADER_SV_TARGET = 0x40 , VKD3D_SHADER_SV_DEPTH = 0x41 , VKD3D_SHADER_SV_COVERAGE = 0x42 ,
  VKD3D_SHADER_SV_DEPTH_GREATER_EQUAL = 0x43 , VKD3D_SHADER_SV_DEPTH_LESS_EQUAL = 0x44 , VKD3D_SHADER_SV_STENCIL_REF = 0x45 , VKD3D_FORCE_32_BIT_ENUM =(VKD3D_SHADER_API_VERSION)
}
 
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_API_VERSION)
}
 
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_API_VERSION)
}
 

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)
 
VKD3D_SHADER_API const char * vkd3d_shader_get_version (unsigned int *major, unsigned int *minor)
 
VKD3D_SHADER_API enum vkd3d_shader_source_type * vkd3d_shader_get_supported_source_types (unsigned int *count)
 
VKD3D_SHADER_API enum vkd3d_shader_target_type * vkd3d_shader_get_supported_target_types (enum vkd3d_shader_source_type source_type, unsigned int *count)
 
VKD3D_SHADER_API int vkd3d_shader_compile (const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
 
VKD3D_SHADER_API void vkd3d_shader_free_messages (char *messages)
 
VKD3D_SHADER_API void vkd3d_shader_free_shader_code (struct vkd3d_shader_code *code)
 
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)
 
VKD3D_SHADER_API void vkd3d_shader_free_root_signature (struct vkd3d_shader_versioned_root_signature_desc *root_signature)
 
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)
 
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)
 
VKD3D_SHADER_API int vkd3d_shader_scan (const struct vkd3d_shader_compile_info *compile_info, char **messages)
 
VKD3D_SHADER_API void vkd3d_shader_free_scan_descriptor_info (struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
 
VKD3D_SHADER_API int vkd3d_shader_parse_input_signature (const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
 
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)
 
VKD3D_SHADER_API void vkd3d_shader_free_shader_signature (struct vkd3d_shader_signature *signature)
 
VKD3D_SHADER_API int vkd3d_shader_preprocess (const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
 
VKD3D_SHADER_API void vkd3d_shader_set_log_callback (PFN_vkd3d_log callback)
 
VKD3D_SHADER_API void vkd3d_shader_free_dxbc (struct vkd3d_shader_dxbc_desc *dxbc)
 
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)
 
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)
 
VKD3D_SHADER_API void vkd3d_shader_free_scan_signature_info (struct vkd3d_shader_scan_signature_info *info)
 
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)
 
VKD3D_SHADER_API void vkd3d_shader_free_scan_combined_resource_sampler_info (struct vkd3d_shader_scan_combined_resource_sampler_info *info)
 

Detailed Description

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.

Since
1.2

Definition in file vkd3d_shader.h.

Macro Definition Documentation

◆ VKD3D_SHADER_API

#define VKD3D_SHADER_API   VKD3D_IMPORT

Definition at line 2445 of file vkd3d_shader.h.

◆ VKD3D_SHADER_DUMMY_SAMPLER_INDEX

#define VKD3D_SHADER_DUMMY_SAMPLER_INDEX   ~0u

Definition at line 964 of file vkd3d_shader.h.

◆ VKD3D_SHADER_NO_SWIZZLE

#define VKD3D_SHADER_NO_SWIZZLE   VKD3D_SHADER_SWIZZLE(X, Y, Z, W)

The identity swizzle ".xyzw".

Definition at line 2265 of file vkd3d_shader.h.

◆ VKD3D_SHADER_SWIZZLE

#define VKD3D_SHADER_SWIZZLE (   x,
  y,
  z,
  w 
)
Value:
(VKD3D_SHADER_SWIZZLE_ ## x << VKD3D_SHADER_SWIZZLE_SHIFT(0) \
| VKD3D_SHADER_SWIZZLE_ ## y << VKD3D_SHADER_SWIZZLE_SHIFT(1) \
| VKD3D_SHADER_SWIZZLE_ ## z << VKD3D_SHADER_SWIZZLE_SHIFT(2) \
| VKD3D_SHADER_SWIZZLE_ ## w << VKD3D_SHADER_SWIZZLE_SHIFT(3))
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLdouble GLdouble z
Definition: glext.h:5874
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx)

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 Y(I)
Definition: polytest.cpp:36
#define VKD3D_SHADER_SWIZZLE(x, y, z, w)

Definition at line 2258 of file vkd3d_shader.h.

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

Definition at line 2245 of file vkd3d_shader.h.

◆ VKD3D_SHADER_SWIZZLE_SHIFT

#define VKD3D_SHADER_SWIZZLE_SHIFT (   idx)    (8u * (idx))

The offset, in bits, of the nth parameter of a vkd3d-shader swizzle.

Definition at line 2247 of file vkd3d_shader.h.

Typedef Documentation

◆ PFN_vkd3d_shader_build_varying_map

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

Since
1.9

Definition at line 3079 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_close_include

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

This callback function is passed as part of struct vkd3d_shader_preprocess_info.

Parameters
codeContents of the included file, which were allocated by the vkd3d_shader_preprocess_info.pfn_open_include callback. The user must free them.
contextThe user-defined pointer passed to struct vkd3d_shader_preprocess_info.

Definition at line 1479 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_compile

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

Definition at line 3024 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_convert_root_signature

◆ PFN_vkd3d_shader_find_signature_element

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

Definition at line 3053 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_dxbc

typedef void(* PFN_vkd3d_shader_free_dxbc) (struct vkd3d_shader_dxbc_desc *dxbc)

Type of vkd3d_shader_free_dxbc().

Since
1.7

Definition at line 3070 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_messages

typedef void(* PFN_vkd3d_shader_free_messages) (char *messages)

Type of vkd3d_shader_free_messages().

Definition at line 3027 of file vkd3d_shader.h.

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

Definition at line 3035 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_scan_combined_resource_sampler_info

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

Since
1.10

Definition at line 3086 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_scan_descriptor_info

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

Definition at line 3049 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_scan_signature_info

typedef void(* PFN_vkd3d_shader_free_scan_signature_info) (struct vkd3d_shader_scan_signature_info *info)

Type of vkd3d_shader_free_scan_signature_info().

Since
1.9

Definition at line 3083 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_shader_code

typedef void(* PFN_vkd3d_shader_free_shader_code) (struct vkd3d_shader_code *code)

Type of vkd3d_shader_free_shader_code().

Definition at line 3029 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_free_shader_signature

typedef void(* PFN_vkd3d_shader_free_shader_signature) (struct vkd3d_shader_signature *signature)

Type of vkd3d_shader_free_shader_signature().

Definition at line 3060 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_get_supported_source_types

typedef enum vkd3d_shader_source_type *(* PFN_vkd3d_shader_get_supported_source_types) (unsigned int *count)

Type of vkd3d_shader_get_supported_source_types().

Definition at line 3016 of file vkd3d_shader.h.

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

Definition at line 3016 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_get_version

typedef const char *(* PFN_vkd3d_shader_get_version) (unsigned int *major, unsigned int *minor)

Type of vkd3d_shader_get_version().

Definition at line 3016 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_open_include

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

This callback function is passed as part of struct vkd3d_shader_preprocess_info.

If this function fails, vkd3d-shader will emit a compilation error, and the pfn_close_include callback will not be called.

Parameters
filenameUnquoted string used as an argument to the #include directive.
localWhether the #include directive is requesting a local (i.e. double-quoted) or system (i.e. angle-bracketed) include.
parent_dataUnprocessed source code of the file in which this #include directive is evaluated. This parameter may be NULL.
contextThe user-defined pointer passed to struct vkd3d_shader_preprocess_info.
outOutput location for the full contents of the included file. The code need not be allocated using standard vkd3d functions, but must remain valid until the corresponding call to pfn_close_include. If this function fails, the contents of this parameter are ignored.
Returns
A member of vkd3d_result.

Definition at line 1463 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_parse_dxbc

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

Since
1.7

Definition at line 3072 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_parse_input_signature

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

Definition at line 3053 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_parse_root_signature

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

Definition at line 3032 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_preprocess

typedef void(* PFN_vkd3d_shader_preprocess) (struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)

Type of vkd3d_shader_preprocess().

Since
1.3

Definition at line 3063 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_scan

typedef int(* PFN_vkd3d_shader_scan) (const struct vkd3d_shader_compile_info *compile_info, char **messages)

Type of vkd3d_shader_scan().

Definition at line 3047 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_serialize_dxbc

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

Since
1.7

Definition at line 3075 of file vkd3d_shader.h.

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

Definition at line 3038 of file vkd3d_shader.h.

◆ PFN_vkd3d_shader_set_log_callback

typedef void(* PFN_vkd3d_shader_set_log_callback) (PFN_vkd3d_log callback)

Type of vkd3d_shader_set_log_callback().

Since
1.4

Definition at line 3067 of file vkd3d_shader.h.

Enumeration Type Documentation

◆ vkd3d_shader_api_version

Since
1.3
Enumerator
VKD3D_SHADER_API_VERSION_1_0 
VKD3D_SHADER_API_VERSION_1_1 
VKD3D_SHADER_API_VERSION_1_2 
VKD3D_SHADER_API_VERSION_1_3 
VKD3D_SHADER_API_VERSION_1_4 
VKD3D_SHADER_API_VERSION_1_5 
VKD3D_SHADER_API_VERSION_1_6 
VKD3D_SHADER_API_VERSION_1_7 
VKD3D_SHADER_API_VERSION_1_8 
VKD3D_SHADER_API_VERSION_1_9 
VKD3D_SHADER_API_VERSION_1_10 
VKD3D_SHADER_API_VERSION_1_11 
VKD3D_SHADER_API_VERSION_1_12 
VKD3D_SHADER_API_VERSION_1_13 
VKD3D_SHADER_API_VERSION_1_14 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 43 of file vkd3d_shader.h.

44{
60
61 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION),
62};
@ VKD3D_SHADER_API_VERSION_1_1
Definition: vkd3d_shader.h:46
@ VKD3D_SHADER_API_VERSION_1_13
Definition: vkd3d_shader.h:58
@ VKD3D_SHADER_API_VERSION_1_5
Definition: vkd3d_shader.h:50
@ VKD3D_SHADER_API_VERSION_1_2
Definition: vkd3d_shader.h:47
@ VKD3D_SHADER_API_VERSION_1_10
Definition: vkd3d_shader.h:55
@ VKD3D_SHADER_API_VERSION_1_3
Definition: vkd3d_shader.h:48
@ VKD3D_SHADER_API_VERSION_1_8
Definition: vkd3d_shader.h:53
@ VKD3D_SHADER_API_VERSION_1_0
Definition: vkd3d_shader.h:45
@ VKD3D_SHADER_API_VERSION_1_14
Definition: vkd3d_shader.h:59
@ VKD3D_SHADER_API_VERSION_1_6
Definition: vkd3d_shader.h:51
@ VKD3D_SHADER_API_VERSION_1_4
Definition: vkd3d_shader.h:49
@ VKD3D_SHADER_API_VERSION_1_7
Definition: vkd3d_shader.h:52
@ VKD3D_SHADER_API_VERSION_1_11
Definition: vkd3d_shader.h:56
@ VKD3D_SHADER_API_VERSION_1_9
Definition: vkd3d_shader.h:54
@ VKD3D_SHADER_API_VERSION_1_12
Definition: vkd3d_shader.h:57
@ VKD3D_FORCE_32_BIT_ENUM
Definition: vkd3d_shader.h:61

◆ vkd3d_shader_binding_flag

Enumerator
VKD3D_SHADER_BINDING_FLAG_BUFFER 
VKD3D_SHADER_BINDING_FLAG_IMAGE 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 466 of file vkd3d_shader.h.

467{
470
471 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_BINDING_FLAG),
472};
@ VKD3D_SHADER_BINDING_FLAG_IMAGE
Definition: vkd3d_shader.h:469
@ VKD3D_SHADER_BINDING_FLAG_BUFFER
Definition: vkd3d_shader.h:468

◆ vkd3d_shader_comparison_func

Enumerator
VKD3D_SHADER_COMPARISON_FUNC_NEVER 
VKD3D_SHADER_COMPARISON_FUNC_LESS 
VKD3D_SHADER_COMPARISON_FUNC_EQUAL 
VKD3D_SHADER_COMPARISON_FUNC_LESS_EQUAL 
VKD3D_SHADER_COMPARISON_FUNC_GREATER 
VKD3D_SHADER_COMPARISON_FUNC_NOT_EQUAL 
VKD3D_SHADER_COMPARISON_FUNC_GREATER_EQUAL 
VKD3D_SHADER_COMPARISON_FUNC_ALWAYS 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1628 of file vkd3d_shader.h.

1629{
1638
1639 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPARISON_FUNC),
1640};
@ VKD3D_SHADER_COMPARISON_FUNC_EQUAL
@ VKD3D_SHADER_COMPARISON_FUNC_GREATER_EQUAL
@ VKD3D_SHADER_COMPARISON_FUNC_ALWAYS
@ VKD3D_SHADER_COMPARISON_FUNC_NEVER
@ VKD3D_SHADER_COMPARISON_FUNC_GREATER
@ VKD3D_SHADER_COMPARISON_FUNC_NOT_EQUAL
@ VKD3D_SHADER_COMPARISON_FUNC_LESS
@ VKD3D_SHADER_COMPARISON_FUNC_LESS_EQUAL

◆ vkd3d_shader_compile_option_backward_compatibility

Individual options to enable various backward compatibility features.

Since
1.10
Enumerator
VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES 

Causes compiler to convert SM1-3 semantics to corresponding System Value semantics, when compiling HLSL sources for SM4+ targets.

This option does the following conversions:

  • POSITION to SV_Position for vertex shader outputs, pixel shader inputs, and geometry shader inputs and outputs;
  • COLORN to SV_TargetN for pixel shader outputs;
  • DEPTH to SV_Depth for pixel shader outputs.
VKD3D_SHADER_COMPILE_OPTION_DOUBLE_AS_FLOAT_ALIAS 

Causes 'double' to behave as an alias for 'float'. This option only applies to HLSL sources with shader model 1-3 target profiles. Without this option using the 'double' type produces compilation errors in these target profiles.

This option is disabled by default.

Since
1.14
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 180 of file vkd3d_shader.h.

181{
205
207};
@ VKD3D_SHADER_COMPILE_OPTION_BACKWARD_COMPATIBILITY
Definition: vkd3d_shader.h:310
@ VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES
Definition: vkd3d_shader.h:193
@ VKD3D_SHADER_COMPILE_OPTION_DOUBLE_AS_FLOAT_ALIAS
Definition: vkd3d_shader.h:204

◆ 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_FORCE_32_BIT_ENUM 

Definition at line 125 of file vkd3d_shader.h.

126{
131
133};
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV
Definition: vkd3d_shader.h:275
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER
Definition: vkd3d_shader.h:128
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_BUFFER
Definition: vkd3d_shader.h:130

◆ vkd3d_shader_compile_option_feature_flags

Advertises feature availability.

Since
1.11
Enumerator
VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64 

The SPIR-V target environment supports 64-bit integer types. This corresponds to the "shaderInt64" feature in the Vulkan API, and the "GL_ARB_gpu_shader_int64" extension in the OpenGL API.

VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64 

The SPIR-V target environment supports 64-bit floating-point types. This corresponds to the "shaderFloat64" feature in the Vulkan API, and the "GL_ARB_gpu_shader_fp64" extension in the OpenGL API.

VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS 

The SPIR-V target environment supports wave operations. This flag is valid only in VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1 or greater, and corresponds to the following minimum requirements in VkPhysicalDeviceSubgroupProperties:

  • subgroupSize >= 4.
  • supportedOperations has BASIC, VOTE, ARITHMETIC, BALLOT, SHUFFLE and QUAD bits set.
  • supportedStages include COMPUTE and FRAGMENT.
    Since
    1.12
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 227 of file vkd3d_shader.h.

228{
246
247 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLAGS),
248};
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS
Definition: vkd3d_shader.h:245
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64
Definition: vkd3d_shader.h:232
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64
Definition: vkd3d_shader.h:236

◆ vkd3d_shader_compile_option_formatting_flags

Enumerator
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_NONE 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS 
VKD3D_SHADER_COMPILE_OPTION_FORMATTING_IO_SIGNATURES 

Emit the signatures when disassembling a shader.

Since
1.12
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 152 of file vkd3d_shader.h.

153{
166
167 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_FORMATTING_FLAGS),
168};
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_IO_SIGNATURES
Definition: vkd3d_shader.h:165
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS
Definition: vkd3d_shader.h:157
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER
Definition: vkd3d_shader.h:158
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR
Definition: vkd3d_shader.h:155
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT
Definition: vkd3d_shader.h:156
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_NONE
Definition: vkd3d_shader.h:154
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS
Definition: vkd3d_shader.h:159

◆ vkd3d_shader_compile_option_fragment_coordinate_origin

Determines the origin of fragment coordinates.

Since
1.10
Enumerator
VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_UPPER_LEFT 

Fragment coordinates originate from the upper-left. This is the default; it's also the only value supported by Vulkan environments.

VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT 

Fragment coordinates originate from the lower-left. This matches the traditional behaviour of OpenGL environments.

VKD3D_FORCE_32_BIT_ENUM 

Definition at line 214 of file vkd3d_shader.h.

◆ 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_COMPILE_OPTION_API_VERSION 

value is a member of enum vkd3d_shader_api_version.

Since
1.3
VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV 

value is a member of enum vkd3d_shader_compile_option_typed_uav.

Since
1.5
VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE 

If value is nonzero, write the point size for Vulkan tessellation and geometry shaders. This option should be enabled if and only if the shaderTessellationAndGeometryPointSize feature is enabled. The default value is nonzero, i.e. write the point size.

This option is supported by vkd3d_shader_compile() for the SPIR-V target type and Vulkan targets; it should not be enabled otherwise.

Since
1.7
VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER 

This option specifies default matrix packing order for HLSL sources. Explicit variable modifiers or pragmas will take precedence.

value is a member of enum vkd3d_shader_compile_option_pack_matrix_order.

Since
1.9
VKD3D_SHADER_COMPILE_OPTION_BACKWARD_COMPATIBILITY 

This option is used to enable various backward compatibility features.

value is a mask of values from enum vkd3d_shader_compile_option_backward_compatibility.

Since
1.10
VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN 

This option specifies the origin of fragment coordinates for SPIR-V targets.

value is a member of enum vkd3d_shader_compile_option_fragment_coordinate_origin.

Since
1.10
VKD3D_SHADER_COMPILE_OPTION_FEATURE 

This option specifies the shader features available in the target environment. These are not extensions, i.e. they are always supported by the driver, but may not be supported by the available hardware.

value is a member of enum vkd3d_shader_compile_option_feature_flags.

Since
1.11
VKD3D_SHADER_COMPILE_OPTION_CHILD_EFFECT 

If value is non-zero compilation will produce a child effect using shared object descriptions, as instructed by the "shared" modifier. Child effects are supported with fx_4_0, and fx_4_1 profiles. This option and "shared" modifiers are ignored for the fx_5_0 profile and non-fx profiles. The fx_2_0 profile does not have a separate concept of child effects, variables marked with "shared" modifier will be marked as such in a binary.

Since
1.12
VKD3D_SHADER_COMPILE_OPTION_WARN_IMPLICIT_TRUNCATION 

If value is nonzero, emit a compile warning warn when vectors or matrices are truncated in an implicit conversion. If warnings are disabled, this option has no effect. This option has no effects for targets other than HLSL.

The default value is nonzero, i.e. enable implicit truncation warnings.

Since
1.12
VKD3D_SHADER_COMPILE_OPTION_INCLUDE_EMPTY_BUFFERS_IN_EFFECTS 

If value is nonzero, empty constant buffers descriptions are written out in the output effect binary. This option applies only to fx_4_0 and fx_4_1 profiles and is otherwise ignored.

Since
1.12
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 264 of file vkd3d_shader.h.

265{
361
362 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPILE_OPTION_NAME),
363};
@ VKD3D_SHADER_COMPILE_OPTION_WARN_IMPLICIT_TRUNCATION
Definition: vkd3d_shader.h:352
@ VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV
Definition: vkd3d_shader.h:281
@ VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER
Definition: vkd3d_shader.h:302
@ VKD3D_SHADER_COMPILE_OPTION_CHILD_EFFECT
Definition: vkd3d_shader.h:341
@ VKD3D_SHADER_COMPILE_OPTION_API_VERSION
Definition: vkd3d_shader.h:279
@ VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE
Definition: vkd3d_shader.h:293
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE
Definition: vkd3d_shader.h:330
@ VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG
Definition: vkd3d_shader.h:273
@ VKD3D_SHADER_COMPILE_OPTION_INCLUDE_EMPTY_BUFFERS_IN_EFFECTS
Definition: vkd3d_shader.h:360
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING
Definition: vkd3d_shader.h:277

◆ vkd3d_shader_compile_option_pack_matrix_order

Determines how matrices are stored.

Since
1.9
Enumerator
VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ROW_MAJOR 
VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_COLUMN_MAJOR 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 171 of file vkd3d_shader.h.

◆ vkd3d_shader_compile_option_typed_uav

Determines how typed UAVs are declared.

Since
1.5
Enumerator
VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_R32 

Use R32(u)i/R32f format for UAVs which are read from. This is the default value.

VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_UNKNOWN 

Use Unknown format for UAVs which are read from. This should only be set if shaderStorageImageReadWithoutFormat is enabled in the target environment.

VKD3D_FORCE_32_BIT_ENUM 

Definition at line 139 of file vkd3d_shader.h.

◆ 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_COMPONENT_DOUBLE 

64-bit IEEE floating-point.

VKD3D_SHADER_COMPONENT_UINT64 

64-bit unsigned integer.

Since
1.11
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 2047 of file vkd3d_shader.h.

2048{
2063
2064 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_COMPONENT_TYPE),
2065};
@ VKD3D_SHADER_COMPONENT_INT
@ VKD3D_SHADER_COMPONENT_UINT
@ VKD3D_SHADER_COMPONENT_DOUBLE
@ VKD3D_SHADER_COMPONENT_UINT64
@ VKD3D_SHADER_COMPONENT_FLOAT
@ VKD3D_SHADER_COMPONENT_VOID
@ VKD3D_SHADER_COMPONENT_BOOL

◆ vkd3d_shader_d3dbc_constant_register

Symbolic register indices for mapping uniform constant register sets in legacy Direct3D bytecode to constant buffer views in the target environment.

Members of this enumeration are used in vkd3d_shader_resource_binding::register_index.

Since
1.9
Enumerator
VKD3D_SHADER_D3DBC_FLOAT_CONSTANT_REGISTER 

The float constant register set, c# in Direct3D assembly.

VKD3D_SHADER_D3DBC_INT_CONSTANT_REGISTER 

The integer constant register set, i# in Direct3D assembly.

VKD3D_SHADER_D3DBC_BOOL_CONSTANT_REGISTER 

The boolean constant register set, b# in Direct3D assembly.

Definition at line 912 of file vkd3d_shader.h.

913{
920};
@ VKD3D_SHADER_D3DBC_BOOL_CONSTANT_REGISTER
Definition: vkd3d_shader.h:919
@ VKD3D_SHADER_D3DBC_FLOAT_CONSTANT_REGISTER
Definition: vkd3d_shader.h:915
@ VKD3D_SHADER_D3DBC_INT_CONSTANT_REGISTER
Definition: vkd3d_shader.h:917

◆ 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_INFO_FLAG_UAV_ATOMICS 

The descriptor is a UAV resource, on which the shader performs atomic ops.

Since
1.6
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER 

The descriptor is a raw (byte-addressed) buffer.

Since
1.9
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1897 of file vkd3d_shader.h.

1898{
1913
1914 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_INFO_FLAG),
1915};
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_ATOMICS
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE

◆ vkd3d_shader_descriptor_range_flags

Enumerator
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_NONE 
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE 
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE 
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE 
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC 
VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS 
Since
1.11
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1753 of file vkd3d_shader.h.

1754{
1762
1763 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_RANGE_FLAGS),
1764};
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DATA_STATIC
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_NONE
@ VKD3D_SHADER_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE

◆ 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_FORCE_32_BIT_ENUM 

Definition at line 419 of file vkd3d_shader.h.

420{
441
442 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_TYPE),
443};
@ VKD3D_SHADER_DESCRIPTOR_TYPE_UAV
Definition: vkd3d_shader.h:430
@ VKD3D_SHADER_DESCRIPTOR_TYPE_CBV
Definition: vkd3d_shader.h:435
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER
Definition: vkd3d_shader.h:440
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SRV
Definition: vkd3d_shader.h:425

◆ vkd3d_shader_filter

Enumerator
VKD3D_SHADER_FILTER_MIN_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MIN_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MIN_POINT_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MIN_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MIN_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_ANISOTROPIC 
VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_COMPARISON_ANISOTROPIC 
VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_MINIMUM_ANISOTROPIC 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT 
VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR 
VKD3D_SHADER_FILTER_MAXIMUM_ANISOTROPIC 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1575 of file vkd3d_shader.h.

1576{
1613
1614 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_FILTER),
1615};
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MIN_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MAXIMUM_ANISOTROPIC
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_ANISOTROPIC
@ VKD3D_SHADER_FILTER_MINIMUM_ANISOTROPIC
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_MIN_POINT_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT
@ VKD3D_SHADER_FILTER_MIN_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MIN_MAG_LINEAR_MIP_POINT
@ VKD3D_SHADER_FILTER_MIN_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR
@ VKD3D_SHADER_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR
@ VKD3D_SHADER_FILTER_COMPARISON_ANISOTROPIC

◆ 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_FORCE_32_BIT_ENUM 

Definition at line 1276 of file vkd3d_shader.h.

1277{
1288
1289 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_LOG_LEVEL),
1290};
@ VKD3D_SHADER_LOG_NONE
@ VKD3D_SHADER_LOG_ERROR
@ VKD3D_SHADER_LOG_WARNING
@ VKD3D_SHADER_LOG_INFO

◆ 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_NONE 
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_FORCE_32_BIT_ENUM 

Definition at line 2124 of file vkd3d_shader.h.

2125{
2135
2136 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_MINIMUM_PRECISION),
2137};
@ VKD3D_SHADER_MINIMUM_PRECISION_UINT_16
@ VKD3D_SHADER_MINIMUM_PRECISION_FIXED_8_2
@ VKD3D_SHADER_MINIMUM_PRECISION_NONE
@ VKD3D_SHADER_MINIMUM_PRECISION_FLOAT_16
@ VKD3D_SHADER_MINIMUM_PRECISION_INT_16

◆ vkd3d_shader_parameter_data_type

The format of data provided to the shader, used in struct vkd3d_shader_parameter and struct vkd3d_shader_parameter1.

Enumerator
VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN 
VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32 

The parameter is provided as a 32-bit unsigned integer.

VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32 

The parameter is provided as a 32-bit float.

Since
1.13
VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4 

The parameter is provided as a 4-dimensional vector of 32-bit floats. This parameter must be used with struct vkd3d_shader_parameter1; it cannot be used with struct vkd3d_shader_parameter.

Since
1.14
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 503 of file vkd3d_shader.h.

504{
517
518 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_DATA_TYPE),
519};
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4
Definition: vkd3d_shader.h:516
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_UNKNOWN
Definition: vkd3d_shader.h:505
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32
Definition: vkd3d_shader.h:507
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32
Definition: vkd3d_shader.h:509

◆ vkd3d_shader_parameter_name

Names a specific shader parameter, used in struct vkd3d_shader_parameter and struct vkd3d_shader_parameter1.

Enumerator
VKD3D_SHADER_PARAMETER_NAME_UNKNOWN 
VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT 

The sample count of the framebuffer, as returned by the HLSL function GetRenderTargetSampleCount() or the GLSL builtin gl_NumSamples.

This parameter should be specified when compiling to SPIR-V, which provides no builtin ability to query this information from the shader.

The default value is 1.

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.

VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC 

Alpha test comparison function. When this parameter is provided, if the alpha component of the pixel shader colour output at location 0 fails the test, as defined by this function and the reference value provided by VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, the fragment will be discarded.

This parameter, along with VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF, can be used to implement fixed function alpha test, as present in Direct3D versions up to 9, if the target environment does not support alpha test as part of its own fixed-function API (as Vulkan and core OpenGL).

The default value is VKD3D_SHADER_COMPARISON_FUNC_ALWAYS.

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32. The value specified must be a member of enum vkd3d_shader_comparison_func.

Only VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT is supported in this version of vkd3d-shader.

Since
1.13
VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF 

Alpha test reference value. See VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC for documentation of alpha test.

The default value is zero.

Since
1.13
VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION 

Whether to use flat interpolation for fragment shader colour inputs. If the value is nonzero, inputs whose semantic usage is COLOR will use flat interpolation instead of linear. This parameter is ignored if the shader model is 4 or greater, since only shader model 3 and below do not specify the interpolation mode in the shader bytecode.

This parameter can be used to implement fixed function shade mode, as present in Direct3D versions up to 9, if the target environment does not support shade mode as part of its own fixed-function API (as Vulkan and core OpenGL).

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.

The default value is zero, i.e. use linear interpolation.

Only VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT is supported in this version of vkd3d-shader.

Since
1.13
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK 

A mask of enabled clip planes.

When this parameter is provided to a vertex shader, for each nonzero bit of this mask, a user clip distance will be generated from vertex position in clip space, and the clip plane defined by the indexed vector, taken from the VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_# parameter.

Regardless of the specific clip planes which are enabled, the clip distances which are output are a contiguous array starting from clip distance 0. This affects the interface of OpenGL. For example, if only clip planes 1 and 3 are enabled (and so the value of the mask is 0xa), the user should enable only GL_CLIP_DISTANCE0 and GL_CLIP_DISTANCE1.

The default value is zero, i.e. do not enable any clip planes.

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.

Only VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT is supported in this version of vkd3d-shader.

If the source shader writes clip distances and this parameter is nonzero, compilation fails.

Since
1.14
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0 

Clip plane values. See VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK for documentation of clip planes.

These enum values are contiguous and arithmetic may safely be performed on them. That is, VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_[n] is VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0 plus n.

The data type for each parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4.

The default value for each plane is a (0, 0, 0, 0) vector.

Since
1.14
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_1 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_2 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_3 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_4 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_5 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_6 
VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_7 
VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE 

Point size.

When this parameter is provided to a vertex, tessellation, or geometry shader, and the source shader does not write point size, it specifies a uniform value which will be written to point size. If the source shader writes point size, this parameter is ignored.

This parameter can be used to implement fixed function point size, as present in Direct3D versions 8 and 9, if the target environment does not support point size as part of its own fixed-function API (as Vulkan and core OpenGL).

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32.

Since
1.14
VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN 

Minimum point size.

When this parameter is provided to a vertex, tessellation, or geometry shader, and the source shader writes point size or uses the VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE parameter, the point size will be clamped to the provided minimum value. If point size is not written in one of these ways, this parameter is ignored. If this parameter is not provided, the point size will not be clamped to a minimum size by vkd3d-shader.

This parameter can be used to implement fixed function point size, as present in Direct3D versions 8 and 9, if the target environment does not support point size as part of its own fixed-function API (as Vulkan and core OpenGL).

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32.

Since
1.14
VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MAX 

Maximum point size.

This parameter has identical behaviour to VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN, except that it provides the maximum size rather than the minimum.

Since
1.14
VKD3D_SHADER_PARAMETER_NAME_POINT_SPRITE 

Whether texture coordinate inputs should take their values from the point coordinate.

When this parameter is provided to a pixel shader, and the value is nonzero, any fragment shader input with the semantic name "TEXCOORD" takes its value from the point coordinates instead of from the previous shader. The point coordinates here are defined as a four-component vector whose X and Y components are the X and Y coordinates of the fragment within a point being rasterized, and whose Z and W components are zero.

In GLSL, the X and Y components are drawn from gl_PointCoord; in SPIR-V, they are drawn from a variable with the BuiltinPointCoord decoration.

This includes t# fragment shader inputs in shader model 2 shaders, as well as texture sampling in shader model 1 shaders.

This parameter can be used to implement fixed function point sprite, as present in Direct3D versions 8 and 9, if the target environment does not support point sprite as part of its own fixed-function API (as Vulkan and core OpenGL).

The data type for this parameter must be VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32.

The default value is zero, i.e. use the original varyings.

Only VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT is supported in this version of vkd3d-shader.

Since
1.14
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 525 of file vkd3d_shader.h.

526{
737
738 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_NAME),
739};
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_6
Definition: vkd3d_shader.h:650
@ VKD3D_SHADER_PARAMETER_NAME_POINT_SPRITE
Definition: vkd3d_shader.h:736
@ VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT
Definition: vkd3d_shader.h:540
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_5
Definition: vkd3d_shader.h:649
@ VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_FUNC
Definition: vkd3d_shader.h:565
@ VKD3D_SHADER_PARAMETER_NAME_UNKNOWN
Definition: vkd3d_shader.h:527
@ VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF
Definition: vkd3d_shader.h:575
@ VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MAX
Definition: vkd3d_shader.h:703
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_3
Definition: vkd3d_shader.h:647
@ VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE_MIN
Definition: vkd3d_shader.h:693
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_7
Definition: vkd3d_shader.h:651
@ VKD3D_SHADER_PARAMETER_NAME_POINT_SIZE
Definition: vkd3d_shader.h:670
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_1
Definition: vkd3d_shader.h:645
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_0
Definition: vkd3d_shader.h:644
@ VKD3D_SHADER_PARAMETER_NAME_FLAT_INTERPOLATION
Definition: vkd3d_shader.h:599
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_MASK
Definition: vkd3d_shader.h:627
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_4
Definition: vkd3d_shader.h:648
@ VKD3D_SHADER_PARAMETER_NAME_CLIP_PLANE_2
Definition: vkd3d_shader.h:646

◆ vkd3d_shader_parameter_type

The manner in which a parameter value is provided to the shader, used in struct vkd3d_shader_parameter and struct vkd3d_shader_parameter1.

Enumerator
VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN 
VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT 

The parameter value is embedded directly in the shader.

VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT 

The parameter value is provided to the shader via specialization constants. This value is only supported for the SPIR-V target type.

VKD3D_SHADER_PARAMETER_TYPE_BUFFER 

The parameter value is provided to the shader as part of a uniform buffer.

Since
1.13
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 478 of file vkd3d_shader.h.

479{
495
496 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARAMETER_TYPE),
497};
@ VKD3D_SHADER_PARAMETER_TYPE_BUFFER
Definition: vkd3d_shader.h:494
@ VKD3D_SHADER_PARAMETER_TYPE_UNKNOWN
Definition: vkd3d_shader.h:480
@ VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT
Definition: vkd3d_shader.h:487
@ VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT
Definition: vkd3d_shader.h:482

◆ vkd3d_shader_parse_dxbc_flags

Flags for vkd3d_shader_parse_dxbc().

Since
1.12
Enumerator
VKD3D_SHADER_PARSE_DXBC_IGNORE_CHECKSUM 

Ignore the checksum and continue parsing even if it is incorrect.

VKD3D_FORCE_32_BIT_ENUM 

Definition at line 255 of file vkd3d_shader.h.

256{
260
261 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_PARSE_DXBC_FLAGS),
262};
@ VKD3D_SHADER_PARSE_DXBC_IGNORE_CHECKSUM
Definition: vkd3d_shader.h:259

◆ 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 single-precision floating-point.

VKD3D_SHADER_RESOURCE_DATA_MIXED 

Undefined/type-less.

Since
1.3
VKD3D_SHADER_RESOURCE_DATA_DOUBLE 

IEEE double-precision floating-point.

Since
1.3
VKD3D_SHADER_RESOURCE_DATA_CONTINUED 

Continuation of the previous component. For example, 64-bit double-precision floating-point data may be returned as two 32-bit components, with the first component (containing the LSB) specified as VKD3D_SHADER_RESOURCE_DATA_DOUBLE, and the second component specified as VKD3D_SHADER_RESOURCE_DATA_CONTINUED.

Since
1.3
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1867 of file vkd3d_shader.h.

1868{
1889
1890 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
1891};
@ VKD3D_SHADER_RESOURCE_DATA_DOUBLE
@ VKD3D_SHADER_RESOURCE_DATA_MIXED
@ VKD3D_SHADER_RESOURCE_DATA_SNORM
@ VKD3D_SHADER_RESOURCE_DATA_CONTINUED
@ VKD3D_SHADER_RESOURCE_DATA_UINT
@ VKD3D_SHADER_RESOURCE_DATA_FLOAT
@ VKD3D_SHADER_RESOURCE_DATA_UNORM
@ VKD3D_SHADER_RESOURCE_DATA_INT

◆ 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_FORCE_32_BIT_ENUM 

Definition at line 1832 of file vkd3d_shader.h.

1833{
1859
1860 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_TYPE),
1861};
@ VKD3D_SHADER_RESOURCE_NONE
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMS
@ VKD3D_SHADER_RESOURCE_TEXTURE_3D
@ VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY
@ VKD3D_SHADER_RESOURCE_BUFFER
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBE
@ VKD3D_SHADER_RESOURCE_TEXTURE_1D
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2D

◆ vkd3d_shader_root_descriptor_flags

Enumerator
VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_NONE 
VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE 
VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE 
VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1743 of file vkd3d_shader.h.

1744{
1749
1750 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_DESCRIPTOR_FLAGS),
1751};
@ VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC
@ VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_NONE
@ VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE
@ VKD3D_SHADER_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE

◆ vkd3d_shader_root_parameter_type

Enumerator
VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE 
VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS 
VKD3D_SHADER_ROOT_PARAMETER_TYPE_CBV 
VKD3D_SHADER_ROOT_PARAMETER_TYPE_SRV 
VKD3D_SHADER_ROOT_PARAMETER_TYPE_UAV 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1696 of file vkd3d_shader.h.

1697{
1703
1704 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_PARAMETER_TYPE),
1705};
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_SRV
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_CBV
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_UAV

◆ vkd3d_shader_root_signature_flags

Enumerator
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_NONE 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS 
VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1719 of file vkd3d_shader.h.

1720{
1729
1730 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_FLAGS),
1731};
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_NONE
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS
@ VKD3D_SHADER_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT

◆ vkd3d_shader_root_signature_version

Enumerator
VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0 
VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1810 of file vkd3d_shader.h.

1811{
1814
1815 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_ROOT_SIGNATURE_VERSION),
1816};
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0

◆ 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_SOURCE_HLSL 

High-Level Shader Language source code.

Since
1.3
VKD3D_SHADER_SOURCE_D3D_BYTECODE 

Legacy Direct3D byte-code. This is the format used for Direct3D shader model 1, 2, and 3 shaders.

Since
1.3
VKD3D_SHADER_SOURCE_DXBC_DXIL 

A 'DirectX Intermediate Language' shader embedded in a DXBC container. This is the format used for Direct3D shader model 6 shaders.

Since
1.9
VKD3D_SHADER_SOURCE_FX 

Binary format used by Direct3D 9/10.x/11 effects. Input is a raw FX section without container.

Since
1.14
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1194 of file vkd3d_shader.h.

1195{
1223
1224 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SOURCE_TYPE),
1225};
@ VKD3D_SHADER_SOURCE_DXBC_DXIL
@ VKD3D_SHADER_SOURCE_D3D_BYTECODE
@ VKD3D_SHADER_SOURCE_HLSL
@ VKD3D_SHADER_SOURCE_FX
@ VKD3D_SHADER_SOURCE_DXBC_TPF
@ VKD3D_SHADER_SOURCE_NONE

◆ vkd3d_shader_spirv_environment

Enumerator
VKD3D_SHADER_SPIRV_ENVIRONMENT_NONE 
VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5 
VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0 
VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1 
Since
1.12
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1337 of file vkd3d_shader.h.

1338{
1341 VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0, /* default target */
1344
1345 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SPIRV_ENVIRONMENT),
1346};
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_NONE
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1

◆ vkd3d_shader_spirv_extension

Enumerator
VKD3D_SHADER_SPIRV_EXTENSION_NONE 
VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION 
VKD3D_SHADER_SPIRV_EXTENSION_EXT_DESCRIPTOR_INDEXING 
Since
1.3
VKD3D_SHADER_SPIRV_EXTENSION_EXT_STENCIL_EXPORT 
Since
1.3
VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER 
Since
1.11
VKD3D_SHADER_SPIRV_EXTENSION_EXT_FRAGMENT_SHADER_INTERLOCK 
Since
1.12
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1348 of file vkd3d_shader.h.

◆ vkd3d_shader_static_border_colour

Enumerator
VKD3D_SHADER_STATIC_BORDER_COLOUR_TRANSPARENT_BLACK 
VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_BLACK 
VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_WHITE 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1642 of file vkd3d_shader.h.

1643{
1647
1648 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STATIC_BORDER_COLOUR),
1649};
@ VKD3D_SHADER_STATIC_BORDER_COLOUR_TRANSPARENT_BLACK
@ VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_BLACK
@ VKD3D_SHADER_STATIC_BORDER_COLOUR_OPAQUE_WHITE

◆ 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_STRUCTURE_TYPE_HLSL_SOURCE_INFO 

The structure is a vkd3d_shader_hlsl_source_info structure.

Since
1.3
VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO 

The structure is a vkd3d_shader_preprocess_info structure.

Since
1.3
VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO 

The structure is a vkd3d_shader_descriptor_offset_info structure.

Since
1.3
VKD3D_SHADER_STRUCTURE_TYPE_SCAN_SIGNATURE_INFO 

The structure is a vkd3d_shader_scan_signature_info structure.

Since
1.9
VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_INFO 

The structure is a vkd3d_shader_varying_map_info structure.

Since
1.9
VKD3D_SHADER_STRUCTURE_TYPE_SCAN_COMBINED_RESOURCE_SAMPLER_INFO 

The structure is a vkd3d_shader_scan_combined_resource_sampler_info structure.

Since
1.10
VKD3D_SHADER_STRUCTURE_TYPE_PARAMETER_INFO 

The structure is a vkd3d_shader_parameter_info structure.

Since
1.13
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 65 of file vkd3d_shader.h.

66{
79
115
116 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STRUCTURE_TYPE),
117};
@ VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO
Definition: vkd3d_shader.h:78
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_COMBINED_RESOURCE_SAMPLER_INFO
Definition: vkd3d_shader.h:109
@ VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO
Definition: vkd3d_shader.h:68
@ VKD3D_SHADER_STRUCTURE_TYPE_PARAMETER_INFO
Definition: vkd3d_shader.h:114
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO
Definition: vkd3d_shader.h:72
@ VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_DOMAIN_SHADER_TARGET_INFO
Definition: vkd3d_shader.h:74
@ VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO
Definition: vkd3d_shader.h:94
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_SIGNATURE_INFO
Definition: vkd3d_shader.h:99
@ VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO
Definition: vkd3d_shader.h:89
@ VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO
Definition: vkd3d_shader.h:70
@ VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_INFO
Definition: vkd3d_shader.h:104
@ VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO
Definition: vkd3d_shader.h:76
@ VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO
Definition: vkd3d_shader.h:84

◆ vkd3d_shader_swizzle_component

Possible values for a single component of a vkd3d-shader swizzle.

Enumerator
VKD3D_SHADER_SWIZZLE_X 
VKD3D_SHADER_SWIZZLE_Y 
VKD3D_SHADER_SWIZZLE_Z 
VKD3D_SHADER_SWIZZLE_W 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 2191 of file vkd3d_shader.h.

2192{
2197
2198 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SWIZZLE_COMPONENT),
2199};
@ VKD3D_SHADER_SWIZZLE_X
@ VKD3D_SHADER_SWIZZLE_Y
@ VKD3D_SHADER_SWIZZLE_W
@ VKD3D_SHADER_SWIZZLE_Z

◆ 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 

Primitive 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_SV_TESS_FACTOR_QUADEDGE 
VKD3D_SHADER_SV_TESS_FACTOR_QUADINT 
VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE 
VKD3D_SHADER_SV_TESS_FACTOR_TRIINT 
VKD3D_SHADER_SV_TESS_FACTOR_LINEDET 
VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN 
VKD3D_SHADER_SV_TARGET 

Render target; SV_Target in Direct3D.

Since
1.9
VKD3D_SHADER_SV_DEPTH 

Depth; SV_Depth in Direct3D.

Since
1.9
VKD3D_SHADER_SV_COVERAGE 

Sample mask; SV_Coverage in Direct3D.

Since
1.9
VKD3D_SHADER_SV_DEPTH_GREATER_EQUAL 

Depth, which is guaranteed to be greater than or equal to the current depth; SV_DepthGreaterEqual in Direct3D.

Since
1.9
VKD3D_SHADER_SV_DEPTH_LESS_EQUAL 

Depth, which is guaranteed to be less than or equal to the current depth; SV_DepthLessEqual in Direct3D.

Since
1.9
VKD3D_SHADER_SV_STENCIL_REF 

Stencil reference; SV_StencilRef in Direct3D.

Since
1.9
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 2068 of file vkd3d_shader.h.

2069{
2071 VKD3D_SHADER_SV_NONE = 0x00,
2101 VKD3D_SHADER_SV_DEPTH = 0x41,
2116
2117 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SYSVAL_SEMANTIC),
2118};
@ VKD3D_SHADER_SV_VERTEX_ID
@ VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX
@ VKD3D_SHADER_SV_DEPTH_LESS_EQUAL
@ VKD3D_SHADER_SV_PRIMITIVE_ID
@ VKD3D_SHADER_SV_COVERAGE
@ VKD3D_SHADER_SV_CULL_DISTANCE
@ VKD3D_SHADER_SV_DEPTH
@ VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE
@ VKD3D_SHADER_SV_TARGET
@ VKD3D_SHADER_SV_NONE
@ VKD3D_SHADER_SV_TESS_FACTOR_LINEDET
@ VKD3D_SHADER_SV_TESS_FACTOR_QUADEDGE
@ VKD3D_SHADER_SV_IS_FRONT_FACE
@ VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX
@ VKD3D_SHADER_SV_TESS_FACTOR_QUADINT
@ VKD3D_SHADER_SV_TESS_FACTOR_TRIINT
@ VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN
@ VKD3D_SHADER_SV_DEPTH_GREATER_EQUAL
@ VKD3D_SHADER_SV_INSTANCE_ID
@ VKD3D_SHADER_SV_CLIP_DISTANCE
@ VKD3D_SHADER_SV_SAMPLE_INDEX
@ VKD3D_SHADER_SV_STENCIL_REF
@ VKD3D_SHADER_SV_POSITION

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

VKD3D_SHADER_TARGET_SPIRV_BINARY 

A SPIR-V shader in binary form. This is the format used for Vulkan shaders.

VKD3D_SHADER_TARGET_SPIRV_TEXT 
VKD3D_SHADER_TARGET_D3D_ASM 

Direct3D shader assembly.

Since
1.3
VKD3D_SHADER_TARGET_D3D_BYTECODE 

Legacy Direct3D byte-code. This is the format used for Direct3D shader model 1, 2, and 3 shaders.

Since
1.3
VKD3D_SHADER_TARGET_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.

Since
1.3
VKD3D_SHADER_TARGET_GLSL 

An 'OpenGL Shading Language' shader.

Since
1.3
VKD3D_SHADER_TARGET_FX 

Binary format used by Direct3D 9/10.x/11 effects profiles. Output is a raw FX section without container.

Since
1.11
VKD3D_SHADER_TARGET_MSL 

A 'Metal Shading Language' shader.

Since
1.14
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1228 of file vkd3d_shader.h.

1229{
1268
1269 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TARGET_TYPE),
1270};
@ VKD3D_SHADER_TARGET_SPIRV_BINARY
@ VKD3D_SHADER_TARGET_D3D_ASM
@ VKD3D_SHADER_TARGET_NONE
@ VKD3D_SHADER_TARGET_SPIRV_TEXT
@ VKD3D_SHADER_TARGET_DXBC_TPF
@ VKD3D_SHADER_TARGET_GLSL
@ VKD3D_SHADER_TARGET_MSL
@ VKD3D_SHADER_TARGET_D3D_BYTECODE
@ VKD3D_SHADER_TARGET_FX

◆ vkd3d_shader_tessellator_output_primitive

Enumerator
VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT 
VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE 
VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW 
VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1385 of file vkd3d_shader.h.

1386{
1391
1392 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_OUTPUT_PRIMITIVE),
1393};
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE

◆ vkd3d_shader_tessellator_partitioning

Enumerator
VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER 
VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2 
VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD 
VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1395 of file vkd3d_shader.h.

1396{
1401
1402 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TESSELLATOR_PARTITIONING),
1403};
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN

◆ vkd3d_shader_texture_address_mode

Enumerator
VKD3D_SHADER_TEXTURE_ADDRESS_MODE_WRAP 
VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR 
VKD3D_SHADER_TEXTURE_ADDRESS_MODE_CLAMP 
VKD3D_SHADER_TEXTURE_ADDRESS_MODE_BORDER 
VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR_ONCE 
VKD3D_FORCE_32_BIT_ENUM 

Definition at line 1617 of file vkd3d_shader.h.

1618{
1624
1625 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TEXTURE_ADDRESS_MODE),
1626};
@ VKD3D_SHADER_TEXTURE_ADDRESS_MODE_BORDER
@ VKD3D_SHADER_TEXTURE_ADDRESS_MODE_CLAMP
@ VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR
@ VKD3D_SHADER_TEXTURE_ADDRESS_MODE_MIRROR_ONCE
@ VKD3D_SHADER_TEXTURE_ADDRESS_MODE_WRAP

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

VKD3D_FORCE_32_BIT_ENUM 

Definition at line 382 of file vkd3d_shader.h.

383{
396
399
400 VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_VISIBILITY),
401};
@ VKD3D_SHADER_VISIBILITY_DOMAIN
Definition: vkd3d_shader.h:391
@ VKD3D_SHADER_VISIBILITY_COMPUTE
Definition: vkd3d_shader.h:398
@ VKD3D_SHADER_VISIBILITY_PIXEL
Definition: vkd3d_shader.h:395
@ VKD3D_SHADER_VISIBILITY_ALL
Definition: vkd3d_shader.h:385
@ VKD3D_SHADER_VISIBILITY_GEOMETRY
Definition: vkd3d_shader.h:393
@ VKD3D_SHADER_VISIBILITY_VERTEX
Definition: vkd3d_shader.h:387
@ VKD3D_SHADER_VISIBILITY_HULL
Definition: vkd3d_shader.h:389

Function Documentation

◆ vkd3d_shader_build_varying_map()

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.

This mapping should be used in struct vkd3d_shader_varying_map_info to compile the first shader.

Parameters
output_signatureThe output signature of the first shader.
input_signatureThe input signature of the second shader.
countOn output, contains the number of entries written into "varyings".
varyingsPointer to an output array of varyings. This must point to space for N varyings, where N is the number of elements in the input signature.
Remarks
Valid legacy Direct3D pixel shaders have at most 12 varying inputs: 10 inter-stage varyings, face, and position. Therefore, in practice, it is safe to call this function with a pre-allocated array with a fixed size of 12.
Since
1.9

Definition at line 2271 of file vkd3d_shader_main.c.

2274{
2275 unsigned int count = 0;
2276 unsigned int i;
2277
2278 TRACE("output_signature %p, input_signature %p, ret_count %p, varyings %p.\n",
2279 output_signature, input_signature, ret_count, varyings);
2280
2281 for (i = 0; i < input_signature->element_count; ++i)
2282 {
2283 const struct vkd3d_shader_signature_element *input_element, *output_element;
2284
2285 input_element = &input_signature->elements[i];
2286
2287 if (input_element->sysval_semantic != VKD3D_SHADER_SV_NONE)
2288 continue;
2289
2290 varyings[count].input_register_index = input_element->register_index;
2291 varyings[count].input_mask = input_element->mask;
2292
2293 if ((output_element = vkd3d_shader_find_signature_element(output_signature,
2294 input_element->semantic_name, input_element->semantic_index, 0)))
2295 {
2296 varyings[count].output_signature_index = output_element - output_signature->elements;
2297 }
2298 else
2299 {
2300 varyings[count].output_signature_index = output_signature->element_count;
2301 }
2302
2303 ++count;
2304 }
2305
2306 *ret_count = count;
2307}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizei const GLchar *const * varyings
Definition: glext.h:6214
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TRACE(s)
Definition: solgame.cpp:4
enum vkd3d_shader_sysval_semantic sysval_semantic
struct vkd3d_shader_signature_element * elements
unsigned int element_count
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)

Referenced by shader_spirv_compile_arguments_init().

◆ vkd3d_shader_compile()

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.

This version of vkd3d-shader supports the following transformations:

  • VKD3D_SHADER_SOURCE_DXBC_TPF to VKD3D_SHADER_TARGET_SPIRV_BINARY
  • VKD3D_SHADER_SOURCE_DXBC_TPF to VKD3D_SHADER_TARGET_SPIRV_TEXT (if vkd3d was compiled with SPIRV-Tools)
  • VKD3D_SHADER_SOURCE_DXBC_TPF to VKD3D_SHADER_TARGET_D3D_ASM
  • VKD3D_SHADER_SOURCE_D3D_BYTECODE to VKD3D_SHADER_TARGET_SPIRV_BINARY
  • VKD3D_SHADER_SOURCE_D3D_BYTECODE to VKD3D_SHADER_TARGET_SPIRV_TEXT (if vkd3d was compiled with SPIRV-Tools)
  • VKD3D_SHADER_SOURCE_D3D_BYTECODE to VKD3D_SHADER_TARGET_D3D_ASM
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_SPIRV_BINARY
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_SPIRV_TEXT (if vkd3d was compiled with SPIRV-Tools)
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_D3D_ASM
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_D3D_BYTECODE
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_DXBC_TPF
  • VKD3D_SHADER_SOURCE_HLSL to VKD3D_SHADER_TARGET_FX
  • VKD3D_SHADER_SOURCE_FX to VKD3D_SHADER_TARGET_D3D_ASM

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 messages are produced by the compiler, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

Definition at line 1708 of file vkd3d_shader_main.c.

1710{
1711 struct vkd3d_shader_message_context message_context;
1712 struct shader_dump_data dump_data;
1713 int ret;
1714
1715 TRACE("compile_info %p, out %p, messages %p.\n", compile_info, out, messages);
1716
1717 if (messages)
1718 *messages = NULL;
1719
1720 if ((ret = vkd3d_shader_validate_compile_info(compile_info, true)) < 0)
1721 return ret;
1722
1723 init_scan_signature_info(compile_info);
1724
1725 vkd3d_shader_message_context_init(&message_context, compile_info->log_level);
1726
1727 fill_shader_dump_data(compile_info, &dump_data);
1728 vkd3d_shader_dump_shader(&dump_data, compile_info->source.code, compile_info->source.size, true);
1729
1730 if (compile_info->source_type == VKD3D_SHADER_SOURCE_HLSL)
1731 {
1732 ret = compile_hlsl(compile_info, out, &message_context);
1733 }
1734 else if (compile_info->source_type == VKD3D_SHADER_SOURCE_FX)
1735 {
1736 ret = fx_parse(compile_info, out, &message_context);
1737 }
1738 else
1739 {
1741 struct vsir_program program;
1742
1743 if (!(ret = vsir_parse(compile_info, config_flags, &message_context, &program)))
1744 {
1745 ret = vsir_program_compile(&program, config_flags, compile_info, out, &message_context);
1747 }
1748 }
1749
1750 if (ret >= 0)
1751 vkd3d_shader_dump_shader(&dump_data, out->code, out->size, false);
1752
1756 vkd3d_shader_message_context_cleanup(&message_context);
1757 return ret;
1758}
#define NULL
Definition: types.h:112
UINT64 uint64_t
Definition: types.h:77
return ret
Definition: mutex.c:147
int fx_parse(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
Definition: fx.c:3789
GLuint program
Definition: glext.h:6723
void vsir_program_cleanup(struct vsir_program *program)
Definition: ir.c:105
struct vkd3d_shader_code source
enum vkd3d_shader_log_level log_level
enum vkd3d_shader_source_type source_type
void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context)
bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context, char **out)
static void init_scan_signature_info(const struct vkd3d_shader_compile_info *info)
static int vkd3d_shader_validate_compile_info(const struct vkd3d_shader_compile_info *compile_info, bool validate_target_type)
static void fill_shader_dump_data(const struct vkd3d_shader_compile_info *compile_info, struct shader_dump_data *data)
void vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context, enum vkd3d_shader_log_level log_level)
static void vkd3d_shader_dump_shader(const struct shader_dump_data *dump_data, const void *data, size_t size, bool source)
static enum vkd3d_result vsir_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t config_flags, struct vkd3d_shader_message_context *message_context, struct vsir_program *program)
uint64_t vkd3d_shader_init_config_flags(void)
int vsir_program_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
static int compile_hlsl(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
#define vkd3d_shader_message_context_trace_messages(context)
@ VKD3D_ERROR_OUT_OF_MEMORY
Definition: vkd3d_types.h:49
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by compile_hlsl_cs(), compile_hlsl_shader(), create_shader_stage(), D3DCompile2(), D3DDisassemble(), fx_4_parse_shader_initializer(), shader_glsl_generate_vkd3d_shader(), shader_spirv_compile_shader(), and shader_trace().

◆ vkd3d_shader_convert_root_signature()

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.

Definition at line 1756 of file dxbc.c.

1758{
1759 int ret;
1760
1761 TRACE("dst %p, version %#x, src %p.\n", dst, version, src);
1762
1763 if (src->version == version)
1764 {
1765 WARN("Nothing to convert.\n");
1767 }
1768
1770 {
1771 WARN("Root signature version %#x not supported.\n", version);
1773 }
1774
1777 {
1778 WARN("Root signature version %#x not supported.\n", src->version);
1780 }
1781
1782 memset(dst, 0, sizeof(*dst));
1783 dst->version = version;
1784
1786 {
1788 }
1789 else
1790 {
1793 }
1794
1795 return ret;
1796}
#define WARN(fmt,...)
Definition: precomp.h:61
static const WCHAR version[]
Definition: asmname.c:66
static int convert_root_signature_to_v1_0(struct vkd3d_shader_versioned_root_signature_desc *dst, const struct vkd3d_shader_versioned_root_signature_desc *src)
Definition: dxbc.c:1594
static int convert_root_signature_to_v1_1(struct vkd3d_shader_versioned_root_signature_desc *dst, const struct vkd3d_shader_versioned_root_signature_desc *src)
Definition: dxbc.c:1715
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define memset(x, y, z)
Definition: compat.h:39
#define VKD3D_ASSERT(cond)
Definition: vkd3d_common.h:49
@ VKD3D_ERROR_INVALID_ARGUMENT
Definition: vkd3d_types.h:51

Referenced by d3d12_versioned_root_signature_deserializer_GetRootSignatureDescAtVersion(), and vkd3d_parse_root_signature_v_1_0().

◆ vkd3d_shader_create_swizzle()

◆ vkd3d_shader_find_signature_element()

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.

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.

Definition at line 1885 of file vkd3d_shader_main.c.

1888{
1890 unsigned int i;
1891
1892 TRACE("signature %p, semantic_name %s, semantic_index %u, stream_index %u.\n",
1894
1895 e = signature->elements;
1896 for (i = 0; i < signature->element_count; ++i)
1897 {
1901 return &e[i];
1902 }
1903
1904 return NULL;
1905}
#define e
Definition: ke_i.h:82
#define debugstr_a
Definition: kernel32.h:31
static int ascii_strcasecmp(const char *a, const char *b)
Definition: vkd3d_common.h:437

Referenced by d3d12_pipeline_state_init_graphics(), and vkd3d_shader_build_varying_map().

◆ vkd3d_shader_free_dxbc()

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, such as vkd3d_shader_parse_dxbc().

This function may free the vkd3d_shader_dxbc_desc::sections member, but does not free the structure itself.

Parameters
dxbcThe vkd3d_shader_dxbc_desc structure to free.
Since
1.7

Definition at line 290 of file dxbc.c.

291{
292 TRACE("dxbc %p.\n", dxbc);
293
294 vkd3d_free(dxbc->sections);
295}
struct vkd3d_shader_dxbc_section_desc * sections
static void vkd3d_free(void *ptr)
Definition: vkd3d_memory.h:52

Referenced by d3d10_effect_parse(), d3dcompiler_get_blob_part(), d3dcompiler_shader_reflection_init(), d3dcompiler_strip_shader(), for_each_dxbc_section(), parse_fx10_preshader(), vkd3d_shader_parse_dxbc(), vkd3d_shader_parse_dxbc_source_type(), and wined3d_shader_extract_from_dxbc().

◆ vkd3d_shader_free_messages()

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

Definition at line 728 of file vkd3d_shader_main.c.

729{
730 TRACE("messages %p.\n", messages);
731
733}

Referenced by compile_hlsl_shader(), D3DCompile2(), D3DDisassemble(), preprocess_shader(), shader_glsl_generate_vkd3d_shader(), shader_spirv_compile_shader(), shader_spirv_scan_shader(), shader_trace(), vkd3d_serialize_root_signature(), and vkd3d_serialize_versioned_root_signature().

◆ vkd3d_shader_free_root_signature()

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

Definition at line 1825 of file vkd3d_shader_main.c.

1826{
1827 TRACE("desc %p.\n", desc);
1828
1830 {
1832 }
1833 else if (desc->version == VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1)
1834 {
1836 }
1837 else if (desc->version)
1838 {
1839 FIXME("Unknown version %#x.\n", desc->version);
1840 return;
1841 }
1842
1843 desc->version = 0;
1844}
#define FIXME(fmt,...)
Definition: precomp.h:53
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static void vkd3d_shader_free_root_signature_v_1_1(struct vkd3d_shader_root_signature_desc1 *root_signature)
static void vkd3d_shader_free_root_signature_v_1_0(struct vkd3d_shader_root_signature_desc *root_signature)

Referenced by d3d12_root_signature_create(), d3d12_root_signature_deserializer_Release(), d3d12_versioned_root_signature_deserializer_Release(), vkd3d_parse_root_signature_v_1_0(), and vkd3d_shader_parse_root_signature().

◆ vkd3d_shader_free_scan_combined_resource_sampler_info()

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

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

Parameters
infoCombined resource-sampler information to free.
Since
1.10

Definition at line 1760 of file vkd3d_shader_main.c.

1762{
1763 TRACE("info %p.\n", info);
1764
1765 vkd3d_free(info->combined_samplers);
1766}

Referenced by vsir_program_compile(), and vsir_program_scan().

◆ vkd3d_shader_free_scan_descriptor_info()

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

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.

Definition at line 1768 of file vkd3d_shader_main.c.

1769{
1770 TRACE("scan_descriptor_info %p.\n", scan_descriptor_info);
1771
1772 vkd3d_free(scan_descriptor_info->descriptors);
1773}
struct vkd3d_shader_descriptor_info * descriptors

Referenced by d3d12_pipeline_state_find_and_init_uav_counters(), shader_spirv_destroy(), shader_spirv_destroy_compute_vk(), and vsir_program_scan().

◆ vkd3d_shader_free_scan_signature_info()

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

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

Parameters
infoScan information to free.
Since
1.9

Definition at line 1775 of file vkd3d_shader_main.c.

1776{
1777 TRACE("info %p.\n", info);
1778
1781 vkd3d_shader_free_shader_signature(&info->patch_constant);
1782}
void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)

Referenced by shader_spirv_destroy(), and vsir_program_scan().

◆ vkd3d_shader_free_shader_code()

◆ vkd3d_shader_free_shader_signature()

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

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

Parameters
signatureSignature description to free.

Definition at line 1907 of file vkd3d_shader_main.c.

1908{
1909 TRACE("signature %p.\n", signature);
1910
1911 for (unsigned int i = 0; i < signature->element_count; ++i)
1912 {
1913 vkd3d_free((void *)signature->elements[i].semantic_name);
1914 }
1915 vkd3d_free(signature->elements);
1916 signature->elements = NULL;
1917}

Referenced by d3d11_input_layout_to_wined3d_declaration(), d3d12_pipeline_state_init_graphics(), and vkd3d_shader_free_scan_signature_info().

◆ vkd3d_shader_get_supported_source_types()

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(). Future versions of the library may introduce additional source types; callers should ignore unrecognised source types.

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.

Definition at line 1937 of file vkd3d_shader_main.c.

1938{
1939 static const enum vkd3d_shader_source_type types[] =
1940 {
1944#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
1946#endif
1948 };
1949
1950 TRACE("count %p.\n", count);
1951
1953 return types;
1954}
#define ARRAY_SIZE(A)
Definition: main.h:20
Definition: cmds.c:130
vkd3d_shader_source_type

Referenced by vkd3d_shader_validate_compile_info().

◆ vkd3d_shader_get_supported_target_types()

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(). Future versions of the library may introduce additional target types; callers should ignore unrecognised target types.

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.

Definition at line 1956 of file vkd3d_shader_main.c.

1958{
1959 static const enum vkd3d_shader_target_type dxbc_tpf_types[] =
1960 {
1962#ifdef HAVE_SPIRV_TOOLS
1964#endif
1966#ifdef VKD3D_SHADER_UNSUPPORTED_GLSL
1968#endif
1969#ifdef VKD3D_SHADER_UNSUPPORTED_MSL
1971#endif
1972 };
1973
1974 static const enum vkd3d_shader_target_type hlsl_types[] =
1975 {
1977#ifdef HAVE_SPIRV_TOOLS
1979#endif
1984 };
1985
1986 static const enum vkd3d_shader_target_type d3dbc_types[] =
1987 {
1989#ifdef HAVE_SPIRV_TOOLS
1991#endif
1993 };
1994
1995#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
1996 static const enum vkd3d_shader_target_type dxbc_dxil_types[] =
1997 {
1999# ifdef HAVE_SPIRV_TOOLS
2001# endif
2003 };
2004#endif
2005
2006 static const enum vkd3d_shader_target_type fx_types[] =
2007 {
2009 };
2010
2011 TRACE("source_type %#x, count %p.\n", source_type, count);
2012
2013 switch (source_type)
2014 {
2016 *count = ARRAY_SIZE(dxbc_tpf_types);
2017 return dxbc_tpf_types;
2018
2020 *count = ARRAY_SIZE(hlsl_types);
2021 return hlsl_types;
2022
2024 *count = ARRAY_SIZE(d3dbc_types);
2025 return d3dbc_types;
2026
2027#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
2029 *count = ARRAY_SIZE(dxbc_dxil_types);
2030 return dxbc_dxil_types;
2031#endif
2032
2034 *count = ARRAY_SIZE(fx_types);
2035 return fx_types;
2036
2037 default:
2038 *count = 0;
2039 return NULL;
2040 }
2041}
vkd3d_shader_target_type

Referenced by vkd3d_shader_validate_compile_info().

◆ vkd3d_shader_get_version()

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

Definition at line 1919 of file vkd3d_shader_main.c.

1920{
1921 int x, y;
1922
1923 TRACE("major %p, minor %p.\n", major, minor);
1924
1925 if (major || minor)
1926 {
1928 if (major)
1929 *major = x;
1930 if (minor)
1931 *minor = y;
1932 }
1933
1934 return "vkd3d-shader " PACKAGE_VERSION VKD3D_VCS_ID;
1935}
#define minor(rdev)
Definition: propsheet.cpp:929
#define major(rdev)
Definition: propsheet.cpp:928
static void vkd3d_parse_version(const char *version, int *major, int *minor)
Definition: vkd3d_common.h:678
#define VKD3D_VCS_ID
Definition: vkd3d_version.h:1

Referenced by msl_generator_generate(), shader_glsl_alloc(), vkd3d_glsl_generator_generate(), wined3d_spirv_shader_backend_init_vk(), write_sm1_uniforms(), and write_sm4_rdef().

◆ vkd3d_shader_parse_dxbc()

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.

Parameters
dxbcA vkd3d_shader_code structure containing the DXBC blob to parse.
flagsA combination of zero or more elements of enum vkd3d_shader_parse_dxbc_flags.
descA vkd3d_shader_dxbc_desc structure describing the contents of the DXBC blob. Its vkd3d_shader_dxbc_section_desc structures will contain pointers into the input blob; its contents are only valid while the input blob is valid. The contents of this structure should be freed with vkd3d_shader_free_dxbc() when no longer needed.
messagesOptional output location for error or informational messages produced by the parser.
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.
If no messages are produced by the parser, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.
Since
1.7

Definition at line 320 of file dxbc.c.

322{
323 struct vkd3d_shader_message_context message_context;
324 int ret;
325
326 TRACE("dxbc {%p, %zu}, flags %#x, desc %p, messages %p.\n", dxbc->code, dxbc->size, flags, desc, messages);
327
328 if (messages)
329 *messages = NULL;
331
332 ret = parse_dxbc(dxbc, &message_context, NULL, flags, desc);
333
335 if (!vkd3d_shader_message_context_copy_messages(&message_context, messages) && ret >= 0)
336 {
339 }
340 vkd3d_shader_message_context_cleanup(&message_context);
341
342 if (ret < 0)
343 memset(desc, 0, sizeof(*desc));
344
345 return ret;
346}
static int parse_dxbc(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_message_context *message_context, const char *source_name, uint32_t flags, struct vkd3d_shader_dxbc_desc *desc)
Definition: dxbc.c:165
void vkd3d_shader_free_dxbc(struct vkd3d_shader_dxbc_desc *dxbc)
Definition: dxbc.c:290
GLbitfield flags
Definition: glext.h:7161
const void * code
Definition: vkd3d_shader.h:413

Referenced by d3d10_effect_parse(), d3dcompiler_get_blob_part(), d3dcompiler_shader_reflection_init(), d3dcompiler_strip_shader(), parse_fx10_preshader(), vkd3d_shader_parse_dxbc_source_type(), and wined3d_shader_extract_from_dxbc().

◆ vkd3d_shader_parse_input_signature()

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

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

This function only parses DXBC shaders, and only retrieves the input signature. To retrieve signatures from other shader types, or other signature types, use vkd3d_shader_scan() and struct vkd3d_shader_scan_signature_info. This function returns the same input signature that is returned in struct vkd3d_shader_scan_signature_info.

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.
The signature may contain pointers into the input shader, and should only be accessed while the input shader remains valid.
messagesOptional output location for error or informational messages produced by the parser.
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.
If no messages are produced by the parser, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

Definition at line 1858 of file vkd3d_shader_main.c.

1860{
1861 struct vkd3d_shader_message_context message_context;
1863 int ret;
1864
1865 TRACE("dxbc {%p, %zu}, signature %p, messages %p.\n", dxbc->code, dxbc->size, signature, messages);
1866
1867 if (messages)
1868 *messages = NULL;
1870
1871 ret = shader_parse_input_signature(dxbc, &message_context, &shader_signature);
1875
1876 vkd3d_shader_message_context_cleanup(&message_context);
1877
1880
1882 return ret;
1883}
int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_message_context *message_context, struct shader_signature *signature)
Definition: dxbc.c:493
static bool vkd3d_shader_signature_from_shader_signature(struct vkd3d_shader_signature *signature, const struct shader_signature *src)
void shader_signature_cleanup(struct shader_signature *signature)

Referenced by d3d11_input_layout_to_wined3d_declaration(), and d3d12_pipeline_state_init_graphics().

◆ vkd3d_shader_parse_root_signature()

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 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 parser.
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.
If no messages are produced by the parser, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

Definition at line 1043 of file dxbc.c.

1045{
1046 struct vkd3d_shader_message_context message_context;
1047 int ret;
1048
1049 TRACE("dxbc {%p, %zu}, root_signature %p, messages %p.\n", dxbc->code, dxbc->size, root_signature, messages);
1050
1051 memset(root_signature, 0, sizeof(*root_signature));
1052 if (messages)
1053 *messages = NULL;
1055
1056 ret = for_each_dxbc_section(dxbc, &message_context, NULL, rts0_handler, root_signature);
1060
1061 vkd3d_shader_message_context_cleanup(&message_context);
1062 if (ret < 0)
1063 vkd3d_shader_free_root_signature(root_signature);
1064
1065 return ret;
1066}
static int rts0_handler(const struct vkd3d_shader_dxbc_section_desc *section, struct vkd3d_shader_message_context *message_context, void *context)
Definition: dxbc.c:1032
static int for_each_dxbc_section(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_message_context *message_context, const char *source_name, int(*section_handler)(const struct vkd3d_shader_dxbc_section_desc *section, struct vkd3d_shader_message_context *message_context, void *ctx), void *ctx)
Definition: dxbc.c:297
VKD3D_SHADER_API void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *root_signature)

Referenced by d3d12_versioned_root_signature_deserializer_init(), and vkd3d_parse_root_signature_v_1_0().

◆ vkd3d_shader_preprocess()

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.

This function supports the following chained structures:

Parameters
compile_infoA chained structure containing compilation parameters.
outA pointer to a vkd3d_shader_code structure in which the preprocessed code will be stored.
The preprocessed 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 preprocessor.
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 messages are produced by the preprocessor, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.
Since
1.3

Definition at line 2043 of file vkd3d_shader_main.c.

2045{
2046 struct vkd3d_shader_message_context message_context;
2047 int ret;
2048
2049 TRACE("compile_info %p, out %p, messages %p.\n", compile_info, out, messages);
2050
2051 if (messages)
2052 *messages = NULL;
2053
2054 if ((ret = vkd3d_shader_validate_compile_info(compile_info, false)) < 0)
2055 return ret;
2056
2057 vkd3d_shader_message_context_init(&message_context, compile_info->log_level);
2058
2059 ret = preproc_lexer_parse(compile_info, out, &message_context);
2060
2064 vkd3d_shader_message_context_cleanup(&message_context);
2065 return ret;
2066}
int preproc_lexer_parse(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)

Referenced by preprocess_shader().

◆ vkd3d_shader_scan()

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.

The source_type member of compile_info must be set to the type of the shader.

The target_type member may be set to VKD3D_SHADER_TARGET_NONE, in which case vkd3d_shader_scan() will return information about the shader in isolation. Alternatively, it may be set to a valid compilation target for the shader, in which case vkd3d_shader_scan() will return information that reflects the interface for a shader as it will be compiled to that target. In this case other chained structures may be appended to compile_info as they would be passed to vkd3d_shader_compile(), and interpreted accordingly, such as vkd3d_shader_spirv_target_info.

(For a hypothetical example, suppose the source shader distinguishes float and integer texture data, but the target environment does not support integer textures. In this case vkd3d_shader_compile() might translate integer operations to float. Accordingly using VKD3D_SHADER_TARGET_NONE would accurately report whether the texture expects integer or float data, but using the relevant specific target type would report VKD3D_SHADER_RESOURCE_DATA_FLOAT.)

Currently this function supports the following code types:

  • VKD3D_SHADER_SOURCE_DXBC_TPF
  • VKD3D_SHADER_SOURCE_D3D_BYTECODE
Parameters
compile_infoA chained structure containing scan parameters.
The scanner supports the following chained structures:
messagesOptional output location for error or informational messages produced by the parser.
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 messages are produced by the parser, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

Definition at line 1595 of file vkd3d_shader_main.c.

1596{
1597 struct vkd3d_shader_message_context message_context;
1598 struct shader_dump_data dump_data;
1599 int ret;
1600
1601 TRACE("compile_info %p, messages %p.\n", compile_info, messages);
1602
1603 if (messages)
1604 *messages = NULL;
1605
1606 if ((ret = vkd3d_shader_validate_compile_info(compile_info, false)) < 0)
1607 return ret;
1608
1609 init_scan_signature_info(compile_info);
1610
1611 vkd3d_shader_message_context_init(&message_context, compile_info->log_level);
1612
1613 fill_shader_dump_data(compile_info, &dump_data);
1614 vkd3d_shader_dump_shader(&dump_data, compile_info->source.code, compile_info->source.size, true);
1615
1616 if (compile_info->source_type == VKD3D_SHADER_SOURCE_HLSL)
1617 {
1618 FIXME("HLSL support not implemented.\n");
1620 }
1621 else
1622 {
1624 struct vsir_program program;
1625
1626 if (!(ret = vsir_parse(compile_info, config_flags, &message_context, &program)))
1627 {
1628 ret = vsir_program_scan(&program, compile_info, &message_context, NULL);
1630 }
1631 }
1632
1636 vkd3d_shader_message_context_cleanup(&message_context);
1637 return ret;
1638}
static int vsir_program_scan(struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_scan_descriptor_info1 *descriptor_info1)
@ VKD3D_ERROR_NOT_IMPLEMENTED
Definition: vkd3d_types.h:55

Referenced by shader_spirv_scan_shader(), and vkd3d_scan_dxbc().

◆ vkd3d_shader_serialize_dxbc()

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.

Parameters
section_countThe number of DXBC sections to serialize.
sectionsAn array of vkd3d_shader_dxbc_section_desc structures to serialize.
dxbcA pointer to a vkd3d_shader_code structure in which the serialized blob will be stored.
The output blob 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 serializer.
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.
If no messages are produced by the serializer, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.
Since
1.7

Definition at line 53 of file dxbc.c.

55{
56 size_t size_position, offsets_position, checksum_position, i;
57 struct vkd3d_bytecode_buffer buffer = {0};
59
60 TRACE("section_count %zu, sections %p, dxbc %p, messages %p.\n", section_count, sections, dxbc, messages);
61
62 if (messages)
63 *messages = NULL;
64
66
67 checksum_position = bytecode_get_size(&buffer);
68 for (i = 0; i < 4; ++i)
69 put_u32(&buffer, 0);
70
71 put_u32(&buffer, 1); /* version */
72 size_position = put_u32(&buffer, 0);
73 put_u32(&buffer, section_count);
74
75 offsets_position = bytecode_get_size(&buffer);
76 for (i = 0; i < section_count; ++i)
77 put_u32(&buffer, 0);
78
79 for (i = 0; i < section_count; ++i)
80 {
81 set_u32(&buffer, offsets_position + i * sizeof(uint32_t), bytecode_align(&buffer));
83 put_u32(&buffer, sections[i].data.size);
84 bytecode_put_bytes(&buffer, sections[i].data.code, sections[i].data.size);
85 }
86 set_u32(&buffer, size_position, bytecode_get_size(&buffer));
87
89 for (i = 0; i < 4; ++i)
90 set_u32(&buffer, checksum_position + i * sizeof(uint32_t), checksum[i]);
91
92 if (!buffer.status)
93 {
94 dxbc->code = buffer.data;
95 dxbc->size = buffer.size;
96 }
97 return buffer.status;
98}
static void put_u32(struct bytecode_buffer *buffer, uint32_t value)
#define TAG_DXBC
UINT32 uint32_t
Definition: types.h:75
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
Definition: fdi.c:353
static void compute_dxbc_checksum(const void *dxbc, size_t size, uint32_t checksum[4])
Definition: dxbc.c:25
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint buffer
Definition: glext.h:5915
struct section sections[2]
Definition: diskspace.c:792
Definition: ecma_167.h:138
size_t bytecode_align(struct vkd3d_bytecode_buffer *buffer)
void set_u32(struct vkd3d_bytecode_buffer *buffer, size_t offset, uint32_t value)
size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size)
static size_t bytecode_get_size(struct vkd3d_bytecode_buffer *buffer)

Referenced by D3DCompile2(), d3dcompiler_get_blob_part(), d3dcompiler_strip_shader(), and dxbc_writer_write().

◆ vkd3d_shader_serialize_root_signature()

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 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 serializer.
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.
If no messages are produced by the serializer, this parameter may receive NULL instead of a valid string pointer.
Returns
A member of vkd3d_result.

Definition at line 1447 of file dxbc.c.

1449{
1451 size_t total_size, chunk_size;
1452 uint32_t checksum[4];
1453 unsigned int i;
1454 int ret;
1455
1456 TRACE("root_signature %p, dxbc %p, messages %p.\n", root_signature, dxbc, messages);
1457
1458 if (messages)
1459 *messages = NULL;
1460
1461 memset(&context, 0, sizeof(context));
1463
1466 {
1468 WARN("Root signature version %#x not supported.\n", root_signature->version);
1470 "Root signature version %#x is not supported.", root_signature->version);
1471 goto done;
1472 }
1473
1474 if ((ret = validate_root_signature_desc(root_signature, &context.message_context)) < 0)
1475 goto done;
1476
1477 memset(dxbc, 0, sizeof(*dxbc));
1479
1480 if ((ret = shader_write_root_signature(&context, root_signature)) < 0)
1481 {
1482 vkd3d_free(context.buffer.data);
1483 goto done;
1484 }
1485
1486 if (context.buffer.status)
1487 {
1489 "Out of memory while writing root signature.");
1490 vkd3d_free(context.buffer.data);
1491 goto done;
1492 }
1493
1494 total_size = bytecode_get_size(&context.buffer);
1495 chunk_size = get_chunk_offset(&context);
1496 set_u32(&context.buffer, context.total_size_position, total_size);
1497 set_u32(&context.buffer, context.chunk_position - sizeof(uint32_t), chunk_size);
1498
1499 dxbc->code = context.buffer.data;
1500 dxbc->size = total_size;
1501
1502 compute_dxbc_checksum(dxbc->code, dxbc->size, checksum);
1503 for (i = 0; i < 4; ++i)
1504 set_u32(&context.buffer, (i + 1) * sizeof(uint32_t), checksum[i]);
1505
1506 ret = VKD3D_OK;
1507
1508done:
1513 return ret;
1514}
static int validate_root_signature_desc(const struct vkd3d_shader_versioned_root_signature_desc *desc, struct vkd3d_shader_message_context *message_context)
Definition: dxbc.c:1421
static size_t get_chunk_offset(struct root_signature_writer_context *context)
Definition: dxbc.c:1140
static void shader_write_root_signature_header(struct root_signature_writer_context *context)
Definition: dxbc.c:1145
static int shader_write_root_signature(struct root_signature_writer_context *context, const struct vkd3d_shader_versioned_root_signature_desc *desc)
Definition: dxbc.c:1317
Definition: http.c:7252
enum vkd3d_shader_root_signature_version version
vkd3d_shader_error
@ VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY
@ VKD3D_SHADER_ERROR_RS_INVALID_VERSION
@ VKD3D_OK
Definition: vkd3d_types.h:43

Referenced by vkd3d_serialize_root_signature(), and vkd3d_serialize_versioned_root_signature().

◆ vkd3d_shader_set_log_callback()

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.

If NULL, or if this function has not been called, libvkd3d-shader will print all enabled log output to stderr.

Parameters
callbackCallback function to set.
Since
1.4

Definition at line 2068 of file vkd3d_shader_main.c.

2069{
2071}
static IPrintDialogCallback callback
Definition: printdlg.c:325
void void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback)
Definition: debug.c:119

Referenced by vkd3d_set_log_callback().