From 7c9161521a38bc52a69b1fd26d55d7666476ed57 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sat, 5 Jul 2014 19:52:20 -0400 Subject: [PATCH] gallium: add INTERP_* opcodes to support interpolateAt* MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Ilia Mirkin Reviewed-by: Marek Olšák Reviewed-by: Roland Scheidegger --- src/gallium/auxiliary/tgsi/tgsi_info.c | 4 ++++ src/gallium/docs/source/tgsi.rst | 23 ++++++++++++++++++++++ src/gallium/include/pipe/p_shader_tokens.h | 6 +++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c index e2c4e65ae56..e24348f6cb5 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_info.c +++ b/src/gallium/auxiliary/tgsi/tgsi_info.c @@ -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 * diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst index 5571b758f4b..8cbb3d8ab7d 100644 --- a/src/gallium/docs/source/tgsi.rst +++ b/src/gallium/docs/source/tgsi.rst @@ -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 diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index e68258d7776..0d3ad6abb51 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -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] */ -- 2.30.2