nir/builder: add a nir_fdot() convenience function
authorConnor Abbott <cwabbott0@gmail.com>
Fri, 19 Jun 2015 00:34:55 +0000 (17:34 -0700)
committerConnor Abbott <cwabbott0@gmail.com>
Fri, 19 Jun 2015 00:34:55 +0000 (17:34 -0700)
src/glsl/nir/nir_builder.h

index 9223e838095cc3ca3a61ae3168cfdbdb0f9c55ab..cffe38abf0e4de539144d5c66cdcb0fdb5ae4ed0 100644 (file)
@@ -240,6 +240,23 @@ nir_swizzle(nir_builder *build, nir_ssa_def *src, unsigned swiz[4],
                      nir_imov_alu(build, alu_src, num_components);
 }
 
+/* Selects the right fdot given the number of components in each source. */
+static inline nir_ssa_def *
+nir_fdot(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1)
+{
+   assert(src0->num_components == src1->num_components);
+   switch (src0->num_components) {
+   case 1: return nir_fmul(build, src0, src1);
+   case 2: return nir_fdot2(build, src0, src1);
+   case 3: return nir_fdot3(build, src0, src1);
+   case 4: return nir_fdot4(build, src0, src1);
+   default:
+      unreachable("bad component size");
+   }
+
+   return NULL;
+}
+
 /**
  * Turns a nir_src into a nir_ssa_def * so it can be passed to
  * nir_build_alu()-based builder calls.