HLSL offsetting
Giovanni Mascellani
gmascellani at codeweavers.com
Tue Jun 14 09:49:43 CDT 2022
Hi,
I finally managed to read through your messages, and it seems that we
have a sort of agreement for trying with structured dereferences, which
I agree with too.
Il 10/06/22 23:13, Zebediah Figura ha scritto:
>> On the other hand, the version of (b) I imagine changes hlsl_deref to:
>> ---
>> struct hlsl_deref
>> {
>> struct hlsl_ir_var *var;
>> unsigned int route_len;
>> struct hlsl_src *route;
>> };
>> ---
>> Where route is intended to be a variable size array of component offsets.
>
> I was envisioning something more explicit, but this is simpler, so my
> guess is that this is what we want.
I can live with Francisco's proposal, but my preference would be for
something like:
enum hlsl_selector_type
{
HLSL_SELECTOR_SUBSCRIPT,
HLSL_SELECTOR_FIELD,
};
struct hlsl_selector
{
enum hlsl_selector_type type;
union
{
hlsl_src *subscript;
unsigned int field;
};
};
struct hlsl_deref
{
struct hlsl_ir_var *var;
unsigned int path_len;
struct hlsl_selector *path;
};
This way field indices are kept as actual numbers, not other nodes that
have to resolve to a constant uint value. In general I like data types
to constrain as much as possible to the valid values that you can store
in them (and I don't think there is any way in HLSL to make a dynamic
reference to a field of a structure, like it is possible in C++).
Giovanni.
More information about the wine-devel
mailing list