[PATCH vkd3d 2/4] vkd3d-shader: Introduce vkd3d_shader_preprocess().

Zebediah Figura zfigura at codeweavers.com
Fri Sep 25 10:49:20 CDT 2020



On 9/25/20 7:59 AM, Henri Verbeet wrote:
> On Fri, 25 Sep 2020 at 03:00, Zebediah Figura <zfigura at 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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200925/006d406d/attachment.sig>


More information about the wine-devel mailing list