gallium: add INTERP_* opcodes to support interpolateAt*
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 5 Jul 2014 23:52:20 +0000 (19:52 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 10 Jul 2014 02:32:13 +0000 (22:32 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/docs/source/tgsi.rst
src/gallium/include/pipe/p_shader_tokens.h

index e2c4e65..e24348f 100644 (file)
@@ -231,6 +231,10 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
    { 1, 1, 0, 0, 0, 0, COMP, "LSB", TGSI_OPCODE_LSB },
    { 1, 1, 0, 0, 0, 0, COMP, "IMSB", TGSI_OPCODE_IMSB },
    { 1, 1, 0, 0, 0, 0, COMP, "UMSB", TGSI_OPCODE_UMSB },
+
+   { 1, 1, 0, 0, 0, 0, OTHR, "INTERP_CENTROID", TGSI_OPCODE_INTERP_CENTROID },
+   { 1, 2, 0, 0, 0, 0, OTHR, "INTERP_SAMPLE", TGSI_OPCODE_INTERP_SAMPLE },
+   { 1, 2, 0, 0, 0, 0, OTHR, "INTERP_OFFSET", TGSI_OPCODE_INTERP_OFFSET },
 };
 
 const struct tgsi_opcode_info *
index 5571b75..8cbb3d8 100644 (file)
@@ -1808,6 +1808,29 @@ This instruction replicates its result.
   dst = \frac{src.x}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
 
 
+Interpolation ISA
+^^^^^^^^^^^^^^^^^
+
+The interpolation instructions allow an input to be interpolated in a
+different way than its declaration. This corresponds to the GLSL 4.00
+interpolateAt* functions. The first argument of each of these must come from
+``TGSI_FILE_INPUT``.
+
+.. opcode:: INTERP_CENTROID - Interpolate at the centroid
+
+   Interpolates the varying specified by src0 at the centroid
+
+.. opcode:: INTERP_SAMPLE - Interpolate at the specified sample
+
+   Interpolates the varying specified by src0 at the sample id specified by
+   src1.x (interpreted as an integer)
+
+.. opcode:: INTERP_OFFSET - Interpolate at the specified offset
+
+   Interpolates the varying specified by src0 at the offset src1.xy from the
+   pixel center (interpreted as floats)
+
+
 .. _doubleopcodes:
 
 Double ISA
index e68258d..0d3ad6a 100644 (file)
@@ -477,7 +477,11 @@ struct tgsi_property_data {
 #define TGSI_OPCODE_IMSB                190
 #define TGSI_OPCODE_UMSB                191
 
-#define TGSI_OPCODE_LAST                192
+#define TGSI_OPCODE_INTERP_CENTROID     192
+#define TGSI_OPCODE_INTERP_SAMPLE       193
+#define TGSI_OPCODE_INTERP_OFFSET       194
+
+#define TGSI_OPCODE_LAST                195
 
 #define TGSI_SAT_NONE            0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */