summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2019-10-09 13:07:04 +1000
committerDave Airlie <[email protected]>2019-10-11 00:32:15 +0000
commit0c09df52e10f0339973f44cef68ff5e237720c8a (patch)
tree73c16a10be2214f4762ee734b63b356f0d2095ce /src/gallium
parent1e65757f4e8283f136924f7594485ea4440c7e78 (diff)
gallium: add a a new cap for changing the TGSI TG4 instruction encoding
Accessing the TG4 component via immediates in the llvmpipe backend is quite messy (like really messy). Roland suggested we change the instruction encoding, so introduce a cap to allow the component to be selected to be store in the sampler swizzle, which should be otherwise unused. I could probably switch all drivers over, but virgl would need some work that I'd prefer not to rush it. Signed-off-by: Dave Airlie <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/util/u_screen.c1
-rw-r--r--src/gallium/docs/source/screen.rst1
-rw-r--r--src/gallium/docs/source/tgsi.rst8
-rw-r--r--src/gallium/include/pipe/p_defines.h1
4 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index ba99ec0615d..bf5b9daad7e 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -341,6 +341,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_ATOMIC_FLOAT_MINMAX:
case PIPE_CAP_SHADER_SAMPLES_IDENTICAL:
case PIPE_CAP_TGSI_ATOMINC_WRAP:
+ case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
return 0;
case PIPE_CAP_MAX_GS_INVOCATIONS:
diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
index 9acab6fafc5..1c402b03391 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -558,6 +558,7 @@ The integer capabilities:
* ``PIPE_CAP_GL_SPIRV``: True if the driver supports ARB_gl_spirv extension.
* ``PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS``: True if the driver supports Variable Pointers in SPIR-V shaders.
* ``PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION``: True if driver supports demote keyword in GLSL programs.
+* ``PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE``: True if driver wants the TG4 component encoded in sampler swizzle rather than as a separate source.
.. _pipe_capf:
diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
index d58b23f024b..e053e821ecd 100644
--- a/src/gallium/docs/source/tgsi.rst
+++ b/src/gallium/docs/source/tgsi.rst
@@ -962,14 +962,22 @@ XXX doesn't look like most of the opcodes really belong here.
require another CAP is hw can do it natively. For now we lower that before
TGSI.
+ PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE changes the encoding so that component
+ is stored in the sampler source swizzle x.
+
.. math::
coord = src0
+ (without TGSI_TG4_COMPONENT_IN_SWIZZLE)
component = src1
dst = texture\_gather4 (unit, coord, component)
+ (with TGSI_TG4_COMPONENT_IN_SWIZZLE)
+ dst = texture\_gather4 (unit, coord)
+ component is encoded in sampler swizzle.
+
(with SM5 - cube array shadow)
.. math::
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 564f37dd1b5..6657271cbf6 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -903,6 +903,7 @@ enum pipe_cap
PIPE_CAP_GL_SPIRV,
PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS,
PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION,
+ PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE,
};
/**