vkd3d-shader/d3dbc: Implement HLSL_OP2_LOGIC_AND for SM1.

This commit is contained in:
Francisco Casas 2024-03-04 16:34:29 -03:00 committed by Alexandre Julliard
parent 777bf772bf
commit 9a222d2be1
Notes: Alexandre Julliard 2024-03-27 23:07:31 +01:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Zebediah Figura (@zfigura)
Approved-by: Francisco Casas (@fcasas)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/724
4 changed files with 11 additions and 6 deletions

View File

@ -2333,6 +2333,10 @@ static void write_sm1_expr(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *b
}
break;
case HLSL_OP2_LOGIC_AND:
write_sm1_binary_op(ctx, buffer, D3DSIO_MIN, &instr->reg, &arg1->reg, &arg2->reg);
break;
case HLSL_OP2_LOGIC_OR:
write_sm1_binary_op(ctx, buffer, D3DSIO_MAX, &instr->reg, &arg1->reg, &arg2->reg);
break;

View File

@ -3622,6 +3622,7 @@ static bool lower_nonfloat_exprs(struct hlsl_ctx *ctx, struct hlsl_ir_node *inst
case HLSL_OP1_NEG:
case HLSL_OP2_ADD:
case HLSL_OP2_DIV:
case HLSL_OP2_LOGIC_AND:
case HLSL_OP2_LOGIC_OR:
case HLSL_OP2_MAX:
case HLSL_OP2_MIN:

View File

@ -158,7 +158,7 @@ todo(glsl) draw quad
probe all rgba (0.0, 1.0, 1.0, 1.0)
[pixel shader todo(sm<4)]
[pixel shader]
int a, b;
float4 main() : SV_TARGET
@ -171,11 +171,11 @@ if(sm<4) uniform 0 float 5
if(sm<4) uniform 4 float 0
if(sm>=4) uniform 0 int 5
if(sm>=4) uniform 1 int 0
todo(sm<4 | glsl) draw quad
todo(glsl) draw quad
probe all rgba (1.0, 1.0, 0.0, 1.0)
if(sm<4) uniform 0 float -1
if(sm<4) uniform 4 float 3
if(sm>=4) uniform 0 int -1
if(sm>=4) uniform 1 int 3
todo(sm<4 | glsl) draw quad
todo(glsl) draw quad
probe all rgba (0.0, 1.0, 0.0, 0.0)

View File

@ -58,7 +58,7 @@ todo(glsl) draw quad
probe all rgba (1.0, 0.0, 0.0, 1.0)
[vertex shader todo(sm<4)]
[vertex shader]
int a, b;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
@ -75,12 +75,12 @@ void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos
if(sm<4) uniform 0 float 0
if(sm<4) uniform 4 float 2
if(sm>=4) uniform 0 int4 0 2 0 0
todo(sm<4 | glsl) draw quad
todo(glsl) draw quad
probe all rgba (0.0, 1.0, 0.0, 1.0)
if(sm<4) uniform 0 float -2
if(sm<4) uniform 4 float 8
if(sm>=4) uniform 0 int4 -2 8 0 0
todo(sm<4 | glsl) draw quad
todo(glsl) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)