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 <airlied@redhat.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
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:
* ``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:
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::
PIPE_CAP_GL_SPIRV,
PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS,
PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION,
+ PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE,
};
/**