Module: vkd3d
Branch: master
Commit: cc0670e0be102ab97a2db6f88386fe16392719ec
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=cc0670e0be102ab97a2db6f…
Author: Zebediah Figura <z.figura12(a)gmail.com>
Date: Thu Sep 3 22:41:50 2020 -0500
include: Document vkd3d-shader shader signature functions.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
include/vkd3d_shader.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index d183088..0eaa0f1 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -1310,11 +1310,63 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char
*/
void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
+/**
+ * Read the input signature of a compiled shader, returning a structural
+ * description which can be easily parsed by C code.
+ *
+ * This function parses a compiled shader. To parse a standalone root signature,
+ * use vkd3d_shader_parse_root_signature().
+ *
+ * \param dxbc Compiled byte code, in DXBC format.
+ *
+ * \param signature Output location in which the parsed root signature will be
+ * stored.
+ * \n
+ * Members of \a signature may be allocated by vkd3d-shader. The signature
+ * should be freed with vkd3d_shader_free_shader_signature() when no longer
+ * needed.
+ *
+ * \param messages Optional output location for error or informational messages
+ * produced by the compiler.
+ * \n
+ * This parameter behaves identically to the \a messages parameter of
+ * vkd3d_shader_compile().
+ *
+ * \return A member of \ref vkd3d_result.
+ */
int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_signature *signature, char **messages);
+/**
+ * Find a single element of a parsed input signature.
+ *
+ * \param signature The parsed input signature. This structure is normally
+ * populated by vkd3d_shader_parse_input_signature().
+ *
+ * \param semantic_name Semantic name of the desired element. This function
+ * performs a case-insensitive comparison with respect to the ASCII plane.
+ *
+ * \param semantic_index Semantic index of the desired element.
+ *
+ * \param stream_index Geometry shader stream index of the desired element. If
+ * the signature is not a geometry shader output signature, this parameter must
+ * be set to 0.
+ *
+ * \return 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 \a signature parameter and should not be explicitly freed.
+ */
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);
+/**
+ * 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.
+ *
+ * \param signature Signature description to free.
+ */
void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature);
#endif /* VKD3D_SHADER_NO_PROTOTYPES */
Module: vkd3d
Branch: master
Commit: c3816fc4e9e3195ee5b135cd6f03311eefe38834
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=c3816fc4e9e3195ee5b135c…
Author: Zebediah Figura <z.figura12(a)gmail.com>
Date: Thu Sep 3 22:41:49 2020 -0500
include: Document struct vkd3d_shader_scan_descriptor_info.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
include/vkd3d_shader.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 75 insertions(+), 2 deletions(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 044eeb9..d183088 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -840,61 +840,125 @@ struct vkd3d_shader_versioned_root_signature_desc
} u;
};
+/**
+ * The type of a shader resource, returned as part of struct
+ * vkd3d_shader_descriptor_info.
+ */
enum vkd3d_shader_resource_type
{
+ /**
+ * The type is invalid or not applicable for this descriptor. This value is
+ * returned for samplers.
+ */
VKD3D_SHADER_RESOURCE_NONE = 0x0,
+ /** Dimensionless buffer. */
VKD3D_SHADER_RESOURCE_BUFFER = 0x1,
+ /** 1-dimensional texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_1D = 0x2,
+ /** 2-dimensional texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_2D = 0x3,
+ /** Multisampled 2-dimensional texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_2DMS = 0x4,
+ /** 3-dimensional texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_3D = 0x5,
+ /** Cubemap texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_CUBE = 0x6,
+ /** 1-dimensional array texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY = 0x7,
+ /** 2-dimensional array texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_2DARRAY = 0x8,
+ /** Multisampled 2-dimensional array texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY = 0x9,
+ /** Cubemap array texture. */
VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY = 0xa,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_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.
+ */
enum vkd3d_shader_resource_data_type
{
+ /** Unsigned normalized integer. */
VKD3D_SHADER_RESOURCE_DATA_UNORM = 0x1,
+ /** Signed normalized integer. */
VKD3D_SHADER_RESOURCE_DATA_SNORM = 0x2,
+ /** Signed integer. */
VKD3D_SHADER_RESOURCE_DATA_INT = 0x3,
+ /** Unsigned integer. */
VKD3D_SHADER_RESOURCE_DATA_UINT = 0x4,
+ /** IEEE floating-point. */
VKD3D_SHADER_RESOURCE_DATA_FLOAT = 0x5,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_RESOURCE_DATA_TYPE),
};
+/**
+ * Additional flags describing a shader descriptor, returned as part of struct
+ * vkd3d_shader_descriptor_info.
+ */
enum vkd3d_shader_descriptor_info_flag
{
+ /**
+ * The descriptor is a UAV resource, whose counter is read from or written
+ * to by the shader.
+ */
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER = 0x00000001,
+ /** The descriptor is a UAV resource, which is read from by the shader. */
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ = 0x00000002,
+ /** The descriptor is a comparison sampler. */
VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE = 0x00000004,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_INFO_FLAG),
};
+/**
+ * Describes a single shader descriptor; returned as part of
+ * struct vkd3d_shader_scan_descriptor_info.
+ */
struct vkd3d_shader_descriptor_info
{
+ /** Type of the descriptor (for example, SRV, CBV, UAV, or sampler). */
enum vkd3d_shader_descriptor_type type;
+ /**
+ * Register space of the resource, or 0 if the shader does not
+ * support multiple register spaces.
+ */
unsigned int register_space;
+ /** Register index of the descriptor. */
unsigned int register_index;
+ /** Resource type, if applicable, including its dimension. */
enum vkd3d_shader_resource_type resource_type;
+ /** Data type contained in the resource (for example, float or integer). */
enum vkd3d_shader_resource_data_type resource_data_type;
- unsigned int flags; /* vkd3d_shader_descriptor_info_flag */
+ /**
+ * Bitwise combination of zero or more members of
+ * \ref vkd3d_shader_descriptor_info_flag.
+ */
+ unsigned int flags;
+ /** Size of this descriptor array, or 1 if a single descriptor. */
unsigned int count;
};
-/* Extends vkd3d_shader_compile_info. */
+/**
+ * A chained structure enumerating the descriptors declared by a shader.
+ *
+ * This structure extends vkd3d_shader_compile_info.
+ */
struct vkd3d_shader_scan_descriptor_info
{
+ /**
+ * Input; must be set to VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO.
+ */
enum vkd3d_shader_structure_type type;
+ /** Input; optional pointer to a structure containing further parameters. */
const void *next;
+ /** Output; returns a pointer to an array of descriptors. */
struct vkd3d_shader_descriptor_info *descriptors;
+ /** Output; size, in elements, of \ref descriptors. */
unsigned int descriptor_count;
};
@@ -1235,6 +1299,15 @@ int vkd3d_shader_convert_root_signature(struct vkd3d_shader_versioned_root_signa
* \return A member of \ref vkd3d_result.
*/
int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages);
+/**
+ * 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.
+ *
+ * \param scan_descriptor_info Descriptor information to free.
+ */
void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info);
int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
Module: vkd3d
Branch: master
Commit: 277e70d0359c1d82cbe46e670a233405ba5b19ee
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=277e70d0359c1d82cbe46e6…
Author: Zebediah Figura <z.figura12(a)gmail.com>
Date: Thu Sep 3 22:41:48 2020 -0500
include: Document vkd3d-shader swizzles.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
include/vkd3d_shader.h | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 16db028..044eeb9 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -961,7 +961,7 @@ struct vkd3d_shader_signature
unsigned int element_count;
};
-/* swizzle bits fields: wwzzyyxx */
+/** Possible values for a single component of a vkd3d-shader swizzle. */
enum vkd3d_shader_swizzle_component
{
VKD3D_SHADER_SWIZZLE_X = 0x0,
@@ -972,17 +972,33 @@ enum vkd3d_shader_swizzle_component
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_SWIZZLE_COMPONENT),
};
+/**
+ * A mask selecting one component from a vkd3d-shader swizzle. The component has
+ * type \ref vkd3d_shader_swizzle_component.
+ */
#define VKD3D_SHADER_SWIZZLE_MASK (0xffu)
+/** The offset, in bits, of the nth parameter of a vkd3d-shader swizzle. */
#define VKD3D_SHADER_SWIZZLE_SHIFT(idx) (8u * (idx))
+/**
+ * A helper macro which returns a vkd3d-shader swizzle with the given
+ * components. The components are specified as the suffixes to members of
+ * \ref vkd3d_shader_swizzle_component. For example, the swizzle ".xwyy" can be
+ * represented as:
+ * \code
+ * VKD3D_SHADER_SWIZZLE(X, W, Y, Y)
+ * \endcode
+ */
#define VKD3D_SHADER_SWIZZLE(x, y, z, w) \
vkd3d_shader_create_swizzle(VKD3D_SHADER_SWIZZLE_ ## x, \
VKD3D_SHADER_SWIZZLE_ ## y, \
VKD3D_SHADER_SWIZZLE_ ## z, \
VKD3D_SHADER_SWIZZLE_ ## w)
+/** The identity swizzle ".xyzw". */
#define VKD3D_SHADER_NO_SWIZZLE VKD3D_SHADER_SWIZZLE(X, Y, Z, W)
+/** Build a vkd3d-shader swizzle with the given components. */
static inline 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)