From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d3d10/effect.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index 8fb613cbc93..b5b02d7a470 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -344,6 +344,62 @@ static void pres_div(float **args, unsigned int n, const struct preshader_instr retval[i] = args[0][instr->scalar ? 0 : i] / args[1][i]; }
+static void pres_bilt(float **args, unsigned int n, const struct preshader_instr *instr) +{ + int *arg1 = (int *)args[0]; + int *arg2 = (int *)args[1]; + float *retval = args[2]; + unsigned int i; + + for (i = 0; i < instr->comp_count; ++i) + { + unsigned int v = arg1[instr->scalar ? 0 : i] < arg2[i] ? ~0u : 0; + retval[i] = *(float *)&v; + } +} + +static void pres_bige(float **args, unsigned int n, const struct preshader_instr *instr) +{ + int *arg1 = (int *)args[0]; + int *arg2 = (int *)args[1]; + float *retval = args[2]; + unsigned int i; + + for (i = 0; i < instr->comp_count; ++i) + { + unsigned int v = arg1[instr->scalar ? 0 : i] >= arg2[i] ? ~0u : 0; + retval[i] = *(float *)&v; + } +} + +static void pres_bieq(float **args, unsigned int n, const struct preshader_instr *instr) +{ + int *arg1 = (int *)args[0]; + int *arg2 = (int *)args[1]; + float *retval = args[2]; + unsigned int i; + + for (i = 0; i < instr->comp_count; ++i) + { + unsigned int v = arg1[instr->scalar ? 0 : i] == arg2[i] ? ~0u : 0; + retval[i] = *(float *)&v; + } +} + +static void pres_bine(float **args, unsigned int n, const struct preshader_instr *instr) +{ + int *arg1 = (int *)args[0]; + int *arg2 = (int *)args[1]; + float *retval = args[2]; + unsigned int i; + + for (i = 0; i < instr->comp_count; ++i) + { + unsigned int v = arg1[instr->scalar ? 0 : i] != arg2[i] ? ~0u : 0; + retval[i] = *(float *)&v; + } +} + static void pres_udiv(float **args, unsigned int n, const struct preshader_instr *instr) { unsigned int *arg1 = (unsigned int *)args[0]; @@ -432,6 +488,10 @@ static const struct preshader_op_info preshader_ops[] = { 0x204, "add", pres_add }, { 0x205, "mul", pres_mul }, { 0x208, "div", pres_div }, + { 0x210, "bilt", pres_bilt }, + { 0x211, "bige", pres_bige }, + { 0x212, "bieq", pres_bieq }, + { 0x213, "bine", pres_bine }, { 0x21a, "udiv", pres_udiv }, { 0x21e, "imax", pres_imax }, { 0x230, "and", pres_and },