On 9/25/20 7:59 AM, Henri Verbeet wrote:
On Fri, 25 Sep 2020 at 03:00, Zebediah Figura zfigura@codeweavers.com wrote:
+/**
- 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 the macro name is
* invalid (for example, if it does not consist solely of alphanumeric
* characters), it will be ignored.
*/
Alphanumeric is perhaps not a great term (e.g. "۱۲۳" or "é" would typically not be considered alphanumeric here), but in any case, I think the definition should be that it's a valid macro identifier in the source language. At the same time, if it's not a valid macro name in the source, it would effectively be ignored anyway, because if an invalid name existed in the source compilation should fail.
+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 itmes, only the first value is
* used.
*/
"times"
- /**
* 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 emit a compilation error if any \#include directives
* are evaluated.
*
* 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;
I think this is fine, but it would also be reasonable to provide a default implementation that tries to open and read the file.
Using POSIX file APIs, I guess? Sure, that can be done easily.
Should there be a way for PFN_vkd3d_shader_open_include to pass an error string to its caller? (Which could then in turn add it to the compiler output.)
Seems reasonable enoguh.