mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/hlsl: Store boolean constants as unsigned.
With this change it is possible to store booleans as 0xffffffff, similarly as what happens at runtime. Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com> Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Francisco Casas <fcasas@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
5b24f7a06c
commit
d9dc79de66
@ -1168,7 +1168,7 @@ static void dump_ir_constant(struct vkd3d_string_buffer *buffer, const struct hl
|
||||
switch (type->base_type)
|
||||
{
|
||||
case HLSL_TYPE_BOOL:
|
||||
vkd3d_string_buffer_printf(buffer, "%s ", value->b ? "true" : "false");
|
||||
vkd3d_string_buffer_printf(buffer, "%s ", value->u ? "true" : "false");
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_DOUBLE:
|
||||
|
@ -416,7 +416,6 @@ struct hlsl_ir_constant
|
||||
int32_t i;
|
||||
float f;
|
||||
double d;
|
||||
bool b;
|
||||
} value[4];
|
||||
struct hlsl_reg reg;
|
||||
};
|
||||
|
@ -867,7 +867,7 @@ static unsigned int evaluate_array_dimension(struct hlsl_ir_node *node)
|
||||
case HLSL_TYPE_DOUBLE:
|
||||
return value->d;
|
||||
case HLSL_TYPE_BOOL:
|
||||
return value->b;
|
||||
return !!value->u;
|
||||
default:
|
||||
assert(0);
|
||||
return 0;
|
||||
@ -3444,7 +3444,7 @@ primary_expr:
|
||||
if (!(c = hlsl_alloc(ctx, sizeof(*c))))
|
||||
YYABORT;
|
||||
init_node(&c->node, HLSL_IR_CONSTANT, hlsl_get_scalar_type(ctx, HLSL_TYPE_BOOL), @1);
|
||||
c->value[0].b = $1;
|
||||
c->value[0].u = $1 ? ~0u : 0;
|
||||
if (!($$ = make_list(ctx, &c->node)))
|
||||
YYABORT;
|
||||
}
|
||||
|
@ -1205,7 +1205,7 @@ static void allocate_const_registers_recurse(struct hlsl_ctx *ctx, struct hlsl_b
|
||||
switch (type->base_type)
|
||||
{
|
||||
case HLSL_TYPE_BOOL:
|
||||
f = value->b;
|
||||
f = !!value->u;
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_FLOAT:
|
||||
|
@ -47,7 +47,7 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
||||
i = src->value[k].f;
|
||||
f = src->value[k].f;
|
||||
d = src->value[k].f;
|
||||
b = src->value[k].f;
|
||||
b = !!src->value[k].f;
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_DOUBLE:
|
||||
@ -55,7 +55,7 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
||||
i = src->value[k].d;
|
||||
f = src->value[k].d;
|
||||
d = src->value[k].d;
|
||||
b = src->value[k].d;
|
||||
b = !!src->value[k].d;
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_INT:
|
||||
@ -63,7 +63,7 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
||||
i = src->value[k].i;
|
||||
f = src->value[k].i;
|
||||
d = src->value[k].i;
|
||||
b = src->value[k].i;
|
||||
b = !!src->value[k].i;
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_UINT:
|
||||
@ -71,15 +71,15 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
||||
i = src->value[k].u;
|
||||
f = src->value[k].u;
|
||||
d = src->value[k].u;
|
||||
b = src->value[k].u;
|
||||
b = !!src->value[k].u;
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_BOOL:
|
||||
u = src->value[k].b;
|
||||
i = src->value[k].b;
|
||||
f = src->value[k].b;
|
||||
d = src->value[k].b;
|
||||
b = src->value[k].b;
|
||||
u = !!src->value[k].u;
|
||||
i = !!src->value[k].u;
|
||||
f = !!src->value[k].u;
|
||||
d = !!src->value[k].u;
|
||||
b = !!src->value[k].u;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -107,7 +107,7 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
||||
break;
|
||||
|
||||
case HLSL_TYPE_BOOL:
|
||||
dst->value[k].b = b;
|
||||
dst->value[k].u = b ? ~0u : 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user