From c41d6b41a945a1fb964c5aceef3ae04fc9d4b106 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sat, 19 May 2012 01:56:29 -0400 Subject: [PATCH] arb1 TEXM3X3SPEC fix: apparently, arb1 doesn't have a DIV instruction. --- mojoshader.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/mojoshader.c b/mojoshader.c index 06d40c29..3e7bccf4 100644 --- a/mojoshader.c +++ b/mojoshader.c @@ -5664,7 +5664,15 @@ static void emit_ARB1_TEXM3X3SPEC(Context *ctx) output_line(ctx, "DP3 %s.y, %s, %s;", dst, src2, src3); output_line(ctx, "MUL %s, %s, %s;", tmp, dst, dst); // normal * normal output_line(ctx, "MUL %s, %s, %s;", tmp2, dst, src5); // normal * eyeray - output_line(ctx, "DIV %s, %s, %s;", tmp, tmp, tmp2); + + // !!! FIXME: This is goofy. There's got to be a way to do vector-wide + // !!! FIXME: divides or reciprocals...right? + output_line(ctx, "RCP %s.x, %s.x;", tmp2, tmp2); + output_line(ctx, "RCP %s.y, %s.y;", tmp2, tmp2); + output_line(ctx, "RCP %s.z, %s.z;", tmp2, tmp2); + output_line(ctx, "RCP %s.w, %s.w;", tmp2, tmp2); + output_line(ctx, "MUL %s, %s, %s;", tmp, tmp, tmp2); + output_line(ctx, "MUL %s, %s, { 2.0, 2.0, 2.0, 2.0 };", tmp, tmp); output_line(ctx, "MAD %s, %s, %s, -%s;", tmp, tmp, dst, src5); output_line(ctx, "TEX %s, %s, texture[%d], 3D;", dst, tmp, stage); @@ -5711,7 +5719,15 @@ static void emit_ARB1_TEXM3X3VSPEC(Context *ctx) output_line(ctx, "DP3 %s.y, %s, %s;", dst, src2, src3); output_line(ctx, "MUL %s, %s, %s;", tmp, dst, dst); // normal * normal output_line(ctx, "MUL %s, %s, %s;", tmp2, dst, tmp3); // normal * eyeray - output_line(ctx, "DIV %s, %s, %s;", tmp, tmp, tmp2); + + // !!! FIXME: This is goofy. There's got to be a way to do vector-wide + // !!! FIXME: divides or reciprocals...right? + output_line(ctx, "RCP %s.x, %s.x;", tmp2, tmp2); + output_line(ctx, "RCP %s.y, %s.y;", tmp2, tmp2); + output_line(ctx, "RCP %s.z, %s.z;", tmp2, tmp2); + output_line(ctx, "RCP %s.w, %s.w;", tmp2, tmp2); + output_line(ctx, "MUL %s, %s, %s;", tmp, tmp, tmp2); + output_line(ctx, "MUL %s, %s, { 2.0, 2.0, 2.0, 2.0 };", tmp, tmp); output_line(ctx, "MAD %s, %s, %s, -%s;", tmp, tmp, dst, tmp3); output_line(ctx, "TEX %s, %s, texture[%d], 3D;", dst, tmp, stage);