mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/hlsl: Lower casts to int using REINTERPRET instead.
I realized that it is better to lower casts to int to FLOOR+REINTERPET instead of appending a FLOOR to all casts to int and assuming that this is the case for all of them in d3dbc.c. This in case we introduce new passes in the future that add casts that we forget to lower, after the lower_casts_to_bool pass.
This commit is contained in:
committed by
Alexandre Julliard
parent
937d76507d
commit
a3319339e4
Notes:
Alexandre Julliard
2024-03-06 23:29:16 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Zebediah Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/671
@@ -2002,7 +2002,10 @@ static void write_sm1_cast(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *b
|
||||
{
|
||||
case HLSL_TYPE_HALF:
|
||||
case HLSL_TYPE_FLOAT:
|
||||
/* A compilation pass applies a FLOOR operation to casts to int, so no change is necessary. */
|
||||
/* A compilation pass turns these into FLOOR+REINTERPRET, so we should not
|
||||
* reach this case unless we are missing something. */
|
||||
hlsl_fixme(ctx, &instr->loc, "Unlowered SM1 cast from float to integer.");
|
||||
break;
|
||||
case HLSL_TYPE_INT:
|
||||
case HLSL_TYPE_UINT:
|
||||
write_sm1_unary_op(ctx, buffer, D3DSIO_MOV, &instr->reg, &arg1->reg, 0, 0);
|
||||
@@ -2242,6 +2245,12 @@ static void write_sm1_expr(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *b
|
||||
|
||||
assert(instr->reg.allocated);
|
||||
|
||||
if (expr->op == HLSL_OP1_REINTERPRET)
|
||||
{
|
||||
write_sm1_unary_op(ctx, buffer, D3DSIO_MOV, &instr->reg, &arg1->reg, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (expr->op == HLSL_OP1_CAST)
|
||||
{
|
||||
write_sm1_cast(ctx, buffer, instr);
|
||||
|
Reference in New Issue
Block a user