Tying this to PIPE_SHADER_CAP_INTEGERS sounds good to me.

And yeah, st_glsl_to_tgsi.cpp will need some work one of these days...

-Brian

On 08/09/2013 01:17 PM, Roland Scheidegger wrote:
I was thinking it should just be part of the native_integer support
(glsl 1.30 basically) so it must be supported if you support that, and
it is always preferred in that case.
Though I won't implement it for other drivers (just llvmpipe/softpipe),
and just hope everybody will implement it so glsl can be switched to use
the new opcodes (so will only be used by internal code for now) as I
think this really makes sense. If not I guess could add a pipe flag and
make glsl act accordingly.

Roland


Am 09.08.2013 21:01, schrieb Brian Paul:
Looks good to me.

Will you be a adding a new PIPE_SHADER_CAP_ flag so the driver can tell
the state tracker which kind of comparison instructions it wants?

-Brian

On 08/09/2013 12:42 PM, Roland Scheidegger wrote:
This is a proposal for new comparison instructions, as the old ones
don't really fit modern (graphic or opencl I guess for that matter)
languages well.
If you've got objections, think the naming is crazy or whatnot I'm open
for suggestions :-). I would think this is not just a much better fit
for d3d10/glsl but for hw as well.

Roland

Am 09.08.2013 20:40, schrieb srol...@vmware.com:
From: Roland Scheidegger <srol...@vmware.com>

The old float comparison opcodes always return floats 0.0 and 1.0
(clarified
in docs these were really floats, was always the case) for legacy
graphics.
But everybody else (opengl,opencl,d3d10) just has to work around their
return results (converting the returned float back to int/boolean).
---
   src/gallium/docs/source/tgsi.rst |   84
++++++++++++++++++++++++++++++--------
   1 file changed, 68 insertions(+), 16 deletions(-)

diff --git a/src/gallium/docs/source/tgsi.rst
b/src/gallium/docs/source/tgsi.rst
index 949ad89..b7c40cf 100644
--- a/src/gallium/docs/source/tgsi.rst
+++ b/src/gallium/docs/source/tgsi.rst
@@ -512,13 +512,13 @@ This instruction replicates its result.

   .. math::

-  dst.x = (src0.x == src1.x) ? 1 : 0
+  dst.x = (src0.x == src1.x) ? 1.0F : 0.0F

-  dst.y = (src0.y == src1.y) ? 1 : 0
+  dst.y = (src0.y == src1.y) ? 1.0F : 0.0F

-  dst.z = (src0.z == src1.z) ? 1 : 0
+  dst.z = (src0.z == src1.z) ? 1.0F : 0.0F

-  dst.w = (src0.w == src1.w) ? 1 : 0
+  dst.w = (src0.w == src1.w) ? 1.0F : 0.0F


   .. opcode:: SFL - Set On False
@@ -538,13 +538,13 @@ This instruction replicates its result.

   .. math::

-  dst.x = (src0.x > src1.x) ? 1 : 0
+  dst.x = (src0.x > src1.x) ? 1.0F : 0.0F

-  dst.y = (src0.y > src1.y) ? 1 : 0
+  dst.y = (src0.y > src1.y) ? 1.0F : 0.0F

-  dst.z = (src0.z > src1.z) ? 1 : 0
+  dst.z = (src0.z > src1.z) ? 1.0F : 0.0F

-  dst.w = (src0.w > src1.w) ? 1 : 0
+  dst.w = (src0.w > src1.w) ? 1.0F : 0.0F


   .. opcode:: SIN - Sine
@@ -560,26 +560,26 @@ This instruction replicates its result.

   .. math::

-  dst.x = (src0.x <= src1.x) ? 1 : 0
+  dst.x = (src0.x <= src1.x) ? 1.0F : 0.0F

-  dst.y = (src0.y <= src1.y) ? 1 : 0
+  dst.y = (src0.y <= src1.y) ? 1.0F : 0.0F

-  dst.z = (src0.z <= src1.z) ? 1 : 0
+  dst.z = (src0.z <= src1.z) ? 1.0F : 0.0F

-  dst.w = (src0.w <= src1.w) ? 1 : 0
+  dst.w = (src0.w <= src1.w) ? 1.0F : 0.0F


   .. opcode:: SNE - Set On Not Equal

   .. math::

-  dst.x = (src0.x != src1.x) ? 1 : 0
+  dst.x = (src0.x != src1.x) ? 1.0F : 0.0F

-  dst.y = (src0.y != src1.y) ? 1 : 0
+  dst.y = (src0.y != src1.y) ? 1.0F : 0.0F

-  dst.z = (src0.z != src1.z) ? 1 : 0
+  dst.z = (src0.z != src1.z) ? 1.0F : 0.0F

-  dst.w = (src0.w != src1.w) ? 1 : 0
+  dst.w = (src0.w != src1.w) ? 1.0F : 0.0F


   .. opcode:: STR - Set On True
@@ -1325,6 +1325,19 @@ Support for these opcodes indicated by
PIPE_SHADER_CAP_INTEGERS (all of them?)



+.. opcode:: FSLT - Float Set On Less Than (ordered)
+
+.. math::
+
+  dst.x = (src0.x < src1.x) ? ~0 : 0
+
+  dst.y = (src0.y < src1.y) ? ~0 : 0
+
+  dst.z = (src0.z < src1.z) ? ~0 : 0
+
+  dst.w = (src0.w < src1.w) ? ~0 : 0
+
+
   .. opcode:: ISLT - Signed Integer Set On Less Than

   .. math::
@@ -1351,6 +1364,19 @@ Support for these opcodes indicated by
PIPE_SHADER_CAP_INTEGERS (all of them?)
     dst.w = (src0.w < src1.w) ? ~0 : 0


+.. opcode:: FSGE - Float Set On Greater Equal Than (ordered)
+
+.. math::
+
+  dst.x = (src0.x >= src1.x) ? ~0 : 0
+
+  dst.y = (src0.y >= src1.y) ? ~0 : 0
+
+  dst.z = (src0.z >= src1.z) ? ~0 : 0
+
+  dst.w = (src0.w >= src1.w) ? ~0 : 0
+
+
   .. opcode:: ISGE - Signed Integer Set On Greater Equal Than

   .. math::
@@ -1377,6 +1403,19 @@ Support for these opcodes indicated by
PIPE_SHADER_CAP_INTEGERS (all of them?)
     dst.w = (src0.w >= src1.w) ? ~0 : 0


+.. opcode:: FSEQ - Float Set On Equal (ordered)
+
+.. math::
+
+  dst.x = (src0.x == src1.x) ? ~0 : 0
+
+  dst.y = (src0.y == src1.y) ? ~0 : 0
+
+  dst.z = (src0.z == src1.z) ? ~0 : 0
+
+  dst.w = (src0.w == src1.w) ? ~0 : 0
+
+
   .. opcode:: USEQ - Integer Set On Equal

   .. math::
@@ -1390,6 +1429,19 @@ Support for these opcodes indicated by
PIPE_SHADER_CAP_INTEGERS (all of them?)
     dst.w = (src0.w == src1.w) ? ~0 : 0


+.. opcode:: FSNE - Float Set On Not Equal (unordered)
+
+.. math::
+
+  dst.x = (src0.x != src1.x) ? ~0 : 0
+
+  dst.y = (src0.y != src1.y) ? ~0 : 0
+
+  dst.z = (src0.z != src1.z) ? ~0 : 0
+
+  dst.w = (src0.w != src1.w) ? ~0 : 0
+
+
   .. opcode:: USNE - Integer Set On Not Equal

   .. math::


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to