summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/tgsi/exec
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/tgsi/exec')
-rw-r--r--src/gallium/auxiliary/tgsi/exec/tgsi_exec.c34
-rwxr-xr-xsrc/gallium/auxiliary/tgsi/exec/tgsi_sse2.c18
2 files changed, 47 insertions, 5 deletions
diff --git a/src/gallium/auxiliary/tgsi/exec/tgsi_exec.c b/src/gallium/auxiliary/tgsi/exec/tgsi_exec.c
index f2ed9e0353..78e7dec569 100644
--- a/src/gallium/auxiliary/tgsi/exec/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/exec/tgsi_exec.c
@@ -1516,11 +1516,41 @@ exec_instruction(
break;
case TGSI_OPCODE_EXP:
- assert (0);
+ debug_printf("TGSI: EXP opcode not implemented\n");
+ /* from ARB_v_p:
+ tmp = ScalarLoad(op0);
+ result.x = 2^floor(tmp);
+ result.y = tmp - floor(tmp);
+ result.z = RoughApprox2ToX(tmp);
+ result.w = 1.0;
+ */
+#if 0
+ /* something like this: */
+ FETCH( &r[0], 0, CHAN_X );
+ micro_exp2( &r[0], &r[0] );
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+ STORE( &r[0], 0, chan_index );
+ }
+#endif
break;
case TGSI_OPCODE_LOG:
- assert (0);
+ debug_printf("TGSI: LOG opcode not implemented\n");
+ /* from ARB_v_p:
+ tmp = fabs(ScalarLoad(op0));
+ result.x = floor(log2(tmp));
+ result.y = tmp / 2^(floor(log2(tmp)));
+ result.z = RoughApproxLog2(tmp);
+ result.w = 1.0;
+ */
+#if 0
+ /* something like this: */
+ FETCH( &r[0], 0, CHAN_X );
+ micro_lg2( &r[0], &r[0] );
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+ STORE( &r[0], 0, chan_index );
+ }
+#endif
break;
case TGSI_OPCODE_MUL:
diff --git a/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
index 0da3b0bdb7..4e80597b3f 100755
--- a/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
+++ b/src/gallium/auxiliary/tgsi/exec/tgsi_sse2.c
@@ -1821,7 +1821,11 @@ emit_instruction(
STORE( func, *inst, 5, 0, CHAN_Z );
}
IF_IS_DST0_CHANNEL_ENABLED( *inst, CHAN_W ) {
- FETCH( func, *inst, 0, TGSI_EXEC_TEMP_ONE_I, TGSI_EXEC_TEMP_ONE_C );
+ emit_tempf(
+ func,
+ 0,
+ TGSI_EXEC_TEMP_ONE_I,
+ TGSI_EXEC_TEMP_ONE_C );
STORE( func, *inst, 0, 0, CHAN_W );
}
break;
@@ -2021,11 +2025,19 @@ emit_instruction(
STORE( func, *inst, 0, 0, CHAN_Y );
}
IF_IS_DST0_CHANNEL_ENABLED( *inst, CHAN_Z ) {
- FETCH( func, *inst, 0, TGSI_EXEC_TEMP_00000000_I, TGSI_EXEC_TEMP_00000000_C );
+ emit_tempf(
+ func,
+ 0,
+ TGSI_EXEC_TEMP_00000000_I,
+ TGSI_EXEC_TEMP_00000000_C );
STORE( func, *inst, 0, 0, CHAN_Z );
}
IF_IS_DST0_CHANNEL_ENABLED( *inst, CHAN_W ) {
- FETCH( func, *inst, 0, TGSI_EXEC_TEMP_ONE_I, TGSI_EXEC_TEMP_ONE_C );
+ emit_tempf(
+ func,
+ 0,
+ TGSI_EXEC_TEMP_ONE_I,
+ TGSI_EXEC_TEMP_ONE_C );
STORE( func, *inst, 0, 0, CHAN_W );
}
break;