mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader: Introduce vkd3d_shader_preprocess().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
be0864f949
commit
f1cc186f18
@ -54,6 +54,12 @@ enum vkd3d_shader_structure_type
|
|||||||
/** The structure is a vkd3d_shader_transform_feedback_info structure. */
|
/** The structure is a vkd3d_shader_transform_feedback_info structure. */
|
||||||
VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO,
|
VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The structure is a vkd3d_shader_preprocess_info structure.
|
||||||
|
* \since 1.3
|
||||||
|
*/
|
||||||
|
VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO,
|
||||||
|
|
||||||
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STRUCTURE_TYPE),
|
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_STRUCTURE_TYPE),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -611,6 +617,128 @@ struct vkd3d_shader_spirv_domain_shader_target_info
|
|||||||
enum vkd3d_shader_tessellator_partitioning partitioning;
|
enum vkd3d_shader_tessellator_partitioning partitioning;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A single preprocessor macro, passed as part of struct
|
||||||
|
* vkd3d_shader_preprocess_info.
|
||||||
|
*/
|
||||||
|
struct vkd3d_shader_macro
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A null-terminated string containing the name of a macro. This macro must
|
||||||
|
* not be a parameterized (i.e. function-like) macro. If this field is not a
|
||||||
|
* valid macro identifier, it will be ignored.
|
||||||
|
*/
|
||||||
|
const char *name;
|
||||||
|
/** A null-terminated string containing the expansion of the macro. */
|
||||||
|
const char *value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* \a pfn_close_include callback will not be called.
|
||||||
|
*
|
||||||
|
* \param filename Unquoted string used as an argument to the \#include
|
||||||
|
* directive.
|
||||||
|
*
|
||||||
|
* \param local Whether the \#include directive is requesting a local (i.e.
|
||||||
|
* double-quoted) or system (i.e. angle-bracketed) include.
|
||||||
|
*
|
||||||
|
* \param parent_data Unprocessed source code of the file in which this
|
||||||
|
* \#include directive is evaluated. This parameter may be NULL.
|
||||||
|
*
|
||||||
|
* \param context The user-defined pointer passed to struct
|
||||||
|
* vkd3d_shader_preprocess_info.
|
||||||
|
*
|
||||||
|
* \param out Output 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 \a pfn_close_include. If this function
|
||||||
|
* fails, the contents of this parameter are ignored.
|
||||||
|
*
|
||||||
|
* \return A member of \ref vkd3d_result.
|
||||||
|
*/
|
||||||
|
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 close preprocessor
|
||||||
|
* includes.
|
||||||
|
*
|
||||||
|
* This callback function is passed as part of struct
|
||||||
|
* vkd3d_shader_preprocess_info.
|
||||||
|
*
|
||||||
|
* \param code Contents of the included file, which were allocated by the
|
||||||
|
* \ref PFN_vkd3d_shader_open_include callback. The source code was allocated by
|
||||||
|
* the user and thus need not be freed by vkd3d_shader_free_shader_code().
|
||||||
|
*
|
||||||
|
* \param context The user-defined pointer passed to struct
|
||||||
|
* vkd3d_shader_preprocess_info.
|
||||||
|
*/
|
||||||
|
typedef void (*PFN_vkd3d_shader_close_include)(const struct vkd3d_shader_code *code, void *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A chained structure containing preprocessing parameters.
|
||||||
|
*
|
||||||
|
* This structure is optional.
|
||||||
|
*
|
||||||
|
* This structure extends vkd3d_shader_compile_info.
|
||||||
|
*
|
||||||
|
* This structure contains only input parameters.
|
||||||
|
*
|
||||||
|
* \since 1.3
|
||||||
|
*/
|
||||||
|
struct vkd3d_shader_preprocess_info
|
||||||
|
{
|
||||||
|
/** Must be set to VKD3D_SHADER_STRUCTURE_TYPE_PREPROCESS_INFO. */
|
||||||
|
enum vkd3d_shader_structure_type type;
|
||||||
|
/** Optional pointer to a structure containing further parameters. */
|
||||||
|
const void *next;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pointer to an array of predefined macros. Each macro in this array will
|
||||||
|
* be expanded as if a corresponding #define statement were prepended to the
|
||||||
|
* source code.
|
||||||
|
*
|
||||||
|
* If the same macro is specified multiple times, only the first value is
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
const struct vkd3d_shader_macro *macros;
|
||||||
|
/** Size, in elements, of \ref macros. */
|
||||||
|
unsigned int macro_count;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optional pointer to a callback function, which will be called in order to
|
||||||
|
* evaluate \#include directives. The function receives parameters
|
||||||
|
* corresponding to the directive's arguments, and should return the
|
||||||
|
* complete text of the included file.
|
||||||
|
*
|
||||||
|
* If this field is set to NULL, or if this structure is omitted,
|
||||||
|
* vkd3d-shader will attempt to open included files using POSIX file APIs.
|
||||||
|
*
|
||||||
|
* If this field is set to NULL, the \ref pfn_close_include field must also
|
||||||
|
* be set to NULL.
|
||||||
|
*/
|
||||||
|
PFN_vkd3d_shader_open_include pfn_open_include;
|
||||||
|
/**
|
||||||
|
* Optional pointer to a callback function, which will be called whenever an
|
||||||
|
* included file is closed. This function will be called exactly once for
|
||||||
|
* each successful call to \ref pfn_open_include, and should be used to free
|
||||||
|
* any resources allocated thereby.
|
||||||
|
*
|
||||||
|
* If this field is set to NULL, the \ref pfn_open_include field must also
|
||||||
|
* be set to NULL.
|
||||||
|
*/
|
||||||
|
PFN_vkd3d_shader_close_include pfn_close_include;
|
||||||
|
/**
|
||||||
|
* User-defined pointer which will be passed unmodified to the
|
||||||
|
* \ref pfn_open_include and \ref pfn_close_include callbacks.
|
||||||
|
*/
|
||||||
|
void *include_context;
|
||||||
|
};
|
||||||
|
|
||||||
/* root signature 1.0 */
|
/* root signature 1.0 */
|
||||||
enum vkd3d_shader_filter
|
enum vkd3d_shader_filter
|
||||||
{
|
{
|
||||||
@ -1454,6 +1582,35 @@ struct vkd3d_shader_signature_element *vkd3d_shader_find_signature_element(
|
|||||||
*/
|
*/
|
||||||
void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature);
|
void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature);
|
||||||
|
|
||||||
|
/* 1.3 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preprocess the given source code.
|
||||||
|
*
|
||||||
|
* This function supports the following chained structures:
|
||||||
|
* - vkd3d_shader_preprocess_info
|
||||||
|
*
|
||||||
|
* \param compile_info A chained structure containing compilation parameters.
|
||||||
|
*
|
||||||
|
* \param out A pointer to a vkd3d_shader_code structure in which the
|
||||||
|
* preprocessed code will be stored.
|
||||||
|
* \n
|
||||||
|
* The preprocessed shader is allocated by vkd3d-shader and should be freed with
|
||||||
|
* vkd3d_shader_free_shader_code() 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.
|
||||||
|
*
|
||||||
|
* \since 1.3
|
||||||
|
*/
|
||||||
|
int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info,
|
||||||
|
struct vkd3d_shader_code *out, char **messages);
|
||||||
|
|
||||||
#endif /* VKD3D_SHADER_NO_PROTOTYPES */
|
#endif /* VKD3D_SHADER_NO_PROTOTYPES */
|
||||||
|
|
||||||
/** Type of vkd3d_shader_get_version(). */
|
/** Type of vkd3d_shader_get_version(). */
|
||||||
|
@ -14,6 +14,7 @@ global:
|
|||||||
vkd3d_shader_get_version;
|
vkd3d_shader_get_version;
|
||||||
vkd3d_shader_parse_input_signature;
|
vkd3d_shader_parse_input_signature;
|
||||||
vkd3d_shader_parse_root_signature;
|
vkd3d_shader_parse_root_signature;
|
||||||
|
vkd3d_shader_preprocess;
|
||||||
vkd3d_shader_scan;
|
vkd3d_shader_scan;
|
||||||
vkd3d_shader_serialize_root_signature;
|
vkd3d_shader_serialize_root_signature;
|
||||||
|
|
||||||
|
@ -1141,3 +1141,11 @@ const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info,
|
||||||
|
struct vkd3d_shader_code *out, char **messages)
|
||||||
|
{
|
||||||
|
TRACE("compile_info %p, out %p, messages %p.\n", compile_info, out, messages);
|
||||||
|
|
||||||
|
return VKD3D_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user