tgsi: add support for new SQRT opcode
authorBrian Paul <brianp@vmware.com>
Fri, 1 Feb 2013 18:15:43 +0000 (11:15 -0700)
committerBrian Paul <brianp@vmware.com>
Mon, 4 Feb 2013 16:33:44 +0000 (09:33 -0700)
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_exec.h
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h

index 9f226c4ec7d2452ef82ee7e9c17464b1933f0777..1220478f9d24fe474ee9c10a5ab329cef2d874e9 100644 (file)
@@ -342,6 +342,16 @@ micro_rsq(union tgsi_exec_channel *dst,
    dst->f[3] = 1.0f / sqrtf(fabsf(src->f[3]));
 }
 
+static void
+micro_sqrt(union tgsi_exec_channel *dst,
+           const union tgsi_exec_channel *src)
+{
+   dst->f[0] = sqrtf(fabsf(src->f[0]));
+   dst->f[1] = sqrtf(fabsf(src->f[1]));
+   dst->f[2] = sqrtf(fabsf(src->f[2]));
+   dst->f[3] = sqrtf(fabsf(src->f[3]));
+}
+
 static void
 micro_seq(union tgsi_exec_channel *dst,
           const union tgsi_exec_channel *src0,
@@ -3562,6 +3572,10 @@ exec_instruction(
       exec_vector_trinary(mach, inst, micro_cnd, TGSI_EXEC_DATA_FLOAT, TGSI_EXEC_DATA_FLOAT);
       break;
 
+   case TGSI_OPCODE_SQRT:
+      exec_vector_unary(mach, inst, micro_sqrt, TGSI_EXEC_DATA_FLOAT, TGSI_EXEC_DATA_FLOAT);
+      break;
+
    case TGSI_OPCODE_DP2A:
       exec_dp2a(mach, inst);
       break;
index fbd28a243392aaafc9486a3c3eaebaf4df74b52c..1a7d979ca21437b3a304edc7a8c841122c2d3e38 100644 (file)
@@ -441,6 +441,8 @@ tgsi_exec_get_shader_param(enum pipe_shader_cap param)
       return 1;
    case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
       return PIPE_MAX_SAMPLERS;
+   case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
+      return 1;
    default:
       return 0;
    }
index 458bc69d1693187dc8355b4905275768590ade13..94b6f60ca890710f0df32ea13dee2c2d2e1c7a1a 100644 (file)
@@ -57,7 +57,7 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
    { 1, 2, 0, 0, 0, 0, COMP, "SUB", TGSI_OPCODE_SUB },
    { 1, 3, 0, 0, 0, 0, COMP, "LRP", TGSI_OPCODE_LRP },
    { 1, 3, 0, 0, 0, 0, COMP, "CND", TGSI_OPCODE_CND },
-   { 0, 0, 0, 0, 0, 0, NONE, "", 20 },      /* removed */
+   { 1, 1, 0, 0, 0, 0, REPL, "SQRT", TGSI_OPCODE_SQRT },
    { 1, 3, 0, 0, 0, 0, REPL, "DP2A", TGSI_OPCODE_DP2A },
    { 0, 0, 0, 0, 0, 0, NONE, "", 22 },      /* removed */
    { 0, 0, 0, 0, 0, 0, NONE, "", 23 },      /* removed */
index 96b864f50d0335998cd0994ef85fe538da7c6267..75e27a666f166c52a5e8e5c36970742a44a394c5 100644 (file)
@@ -60,6 +60,7 @@ OP13(MAD)
 OP12(SUB)
 OP13(LRP)
 OP13(CND)
+OP11(SQRT)
 OP13(DP2A)
 OP11(FRC)
 OP13(CLAMP)