[PATCH vkd3d 1/5] vkd3d-shader: Partially implement #define.
Zebediah Figura (she/her)
zfigura at codeweavers.com
Tue Jan 5 12:17:36 CST 2021
On 1/5/21 12:02 PM, Henri Verbeet wrote:
> On Tue, 5 Jan 2021 at 18:22, Zebediah Figura (she/her)
> <zfigura at codeweavers.com> wrote:
>>
>> On 1/5/21 11:12 AM, Henri Verbeet wrote:
>>> On Tue, 5 Jan 2021 at 17:17, Zebediah Figura <zfigura at codeweavers.com> wrote:
>>>> @@ -41,6 +47,8 @@ struct preproc_ctx
>>>> struct vkd3d_string_buffer buffer;
>>>> struct vkd3d_shader_location location;
>>>>
>>>> + struct list macros;
>>>> +
>>> Does that need to be a list? For the purposes of this series, it seems
>>> an array would work at least as well.
>>>
>> It eases removal via #undef. There's also a couple places that
>> store pointers to the macro (I think they're not in this series, but
>> rather relate to expansion) which would complicate using a flat array at
>> least.
>
> Unless we care about the order, removal would essentially be
> "macros[idx] = macros[--macro_count];"
True; I forgot about that.
> Storing pointers to macros would indeed be an issue, although I'd
> expect that to be an issue regardless of how macros are stored, unless
> you also e.g. reference count them. Either way, if it's needed for
> later patches that's fine.
>
That is true. Of course, using an array makes it worse, because now
you're potentially affecting macros other than the one that's being
deleted while expanded.
Incidentally, the following shader:
#define FUNC(a,b) a ## b
FUNC(a,
#undef FUNC
b)
yields, with native d3dcompiler_47, the output "FUNC" and an error "not
enough actual parameters for macro 'FUNC'".
I don't think it'd be very hard to fix up the code to make sure a macro
in use can't be moved, but on the other hand it strikes me as
unnecessarily fragile (wrt later reading or modification).
I also don't know how much of a performance concern this actually is.
More information about the wine-devel
mailing list