On Sun, Jul 6, 2014 at 6:23 PM, Roland Scheidegger <srol...@vmware.com> wrote: > The only thing I'm wondering is about hw support for offset version > taking a generic float. In particular, it looks like intel graphics > actually uses 4bit immediates for the offset version (just like dictated > by the d3d11 specification). > At a quick glance I couldn't quite see how it's done with southern > islands, but this one has a 4bit int to float instruction "to be used in > shader interpolation" so my guess is it will indeed take any float > natively. Didn't look at nvidia, but a float makes sense then if not all > hw agrees.
NVIDIA Kepler (and I assume all Fermi+) hw takes a S0.11 fixed-point point offset (12 bits total) for each axis (stuffed into a single 32-bit register), clamped to [-0.5, 0.4375]. No clue if all the bits are actually used. GLSL also wants floats, so someone would have to do the conversion somewhere... might as well make the interface more generic, IMO. > > Reviewed-by: Roland Scheidegger <srol...@vmware.com> > > Am 06.07.2014 07:02, schrieb Ilia Mirkin: >> Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> >> --- >> >> There's an accompanying patch based on ChrisF's unpublished series to add >> interpolateAt* to mesa core that makes use of them, and a further couple of >> patches which inmplement this on nvc0. >> >> With all that, nvc0 passes all the piglits in ChrisF's repo except for the >> interpolateAtCentroid-flat one, which fails on the blob driver in exactly the >> same way (and for a reason totally unrelated to these new opcodes). >> >> 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 e2c4e65..e24348f 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 4213b4a..3f4f0e6 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 e68258d..0d3ad6a 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] */ >> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev