mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07: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:
committed by
Alexandre Julliard
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)
|
switch (type->base_type)
|
||||||
{
|
{
|
||||||
case HLSL_TYPE_BOOL:
|
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;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_DOUBLE:
|
case HLSL_TYPE_DOUBLE:
|
||||||
|
@@ -416,7 +416,6 @@ struct hlsl_ir_constant
|
|||||||
int32_t i;
|
int32_t i;
|
||||||
float f;
|
float f;
|
||||||
double d;
|
double d;
|
||||||
bool b;
|
|
||||||
} value[4];
|
} value[4];
|
||||||
struct hlsl_reg reg;
|
struct hlsl_reg reg;
|
||||||
};
|
};
|
||||||
|
@@ -867,7 +867,7 @@ static unsigned int evaluate_array_dimension(struct hlsl_ir_node *node)
|
|||||||
case HLSL_TYPE_DOUBLE:
|
case HLSL_TYPE_DOUBLE:
|
||||||
return value->d;
|
return value->d;
|
||||||
case HLSL_TYPE_BOOL:
|
case HLSL_TYPE_BOOL:
|
||||||
return value->b;
|
return !!value->u;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -3444,7 +3444,7 @@ primary_expr:
|
|||||||
if (!(c = hlsl_alloc(ctx, sizeof(*c))))
|
if (!(c = hlsl_alloc(ctx, sizeof(*c))))
|
||||||
YYABORT;
|
YYABORT;
|
||||||
init_node(&c->node, HLSL_IR_CONSTANT, hlsl_get_scalar_type(ctx, HLSL_TYPE_BOOL), @1);
|
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)))
|
if (!($$ = make_list(ctx, &c->node)))
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
|
@@ -1205,7 +1205,7 @@ static void allocate_const_registers_recurse(struct hlsl_ctx *ctx, struct hlsl_b
|
|||||||
switch (type->base_type)
|
switch (type->base_type)
|
||||||
{
|
{
|
||||||
case HLSL_TYPE_BOOL:
|
case HLSL_TYPE_BOOL:
|
||||||
f = value->b;
|
f = !!value->u;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_FLOAT:
|
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;
|
i = src->value[k].f;
|
||||||
f = src->value[k].f;
|
f = src->value[k].f;
|
||||||
d = src->value[k].f;
|
d = src->value[k].f;
|
||||||
b = src->value[k].f;
|
b = !!src->value[k].f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_DOUBLE:
|
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;
|
i = src->value[k].d;
|
||||||
f = src->value[k].d;
|
f = src->value[k].d;
|
||||||
d = src->value[k].d;
|
d = src->value[k].d;
|
||||||
b = src->value[k].d;
|
b = !!src->value[k].d;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_INT:
|
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;
|
i = src->value[k].i;
|
||||||
f = src->value[k].i;
|
f = src->value[k].i;
|
||||||
d = src->value[k].i;
|
d = src->value[k].i;
|
||||||
b = src->value[k].i;
|
b = !!src->value[k].i;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_UINT:
|
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;
|
i = src->value[k].u;
|
||||||
f = src->value[k].u;
|
f = src->value[k].u;
|
||||||
d = src->value[k].u;
|
d = src->value[k].u;
|
||||||
b = src->value[k].u;
|
b = !!src->value[k].u;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_BOOL:
|
case HLSL_TYPE_BOOL:
|
||||||
u = src->value[k].b;
|
u = !!src->value[k].u;
|
||||||
i = src->value[k].b;
|
i = !!src->value[k].u;
|
||||||
f = src->value[k].b;
|
f = !!src->value[k].u;
|
||||||
d = src->value[k].b;
|
d = !!src->value[k].u;
|
||||||
b = src->value[k].b;
|
b = !!src->value[k].u;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -107,7 +107,7 @@ static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HLSL_TYPE_BOOL:
|
case HLSL_TYPE_BOOL:
|
||||||
dst->value[k].b = b;
|
dst->value[k].u = b ? ~0u : 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user