gallium/tgsi: Add support for raw resources.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 30 Apr 2012 17:08:55 +0000 (19:08 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 11 May 2012 10:39:41 +0000 (12:39 +0200)
commit82c90b2da8e236bc134cb2bd0ec4e09551b12164
tree7e6fd5e47737a52c438700bc6734f4da61d1ef09
parenta4ebb04214bab1cd9bd41967232ec89441e31744
gallium/tgsi: Add support for raw resources.

Normal resource access (e.g. the LOAD TGSI opcode) is supposed to
perform a series of conversions to turn the texture data as it's found
in memory into the target data type.

In compute programs it's often the case that we only want to access
the raw bits as they're stored in some buffer object, and any kind of
channel conversion and scaling is harmful or inefficient, especially
in implementations that lack proper hardware support to take care of
it -- in those cases the conversion has to be implemented in software
and it's likely to result in a performance hit even if the pipe_buffer
and declaration data types are set up in a way that would just pass
the data through.

Add a declaration flag that marks a resource as typeless.  No channel
conversion will be performed in that case, and the X coordinate of the
address vector will be interpreted in byte units instead of elements
for obvious reasons.

This is similar to D3D11's ByteAddressBuffer, and will be used to
implement OpenCL's constant arguments.  The remaining four compute
memory spaces can also be understood as raw resources.
src/gallium/auxiliary/tgsi/tgsi_build.c
src/gallium/auxiliary/tgsi/tgsi_dump.c
src/gallium/auxiliary/tgsi/tgsi_text.c
src/gallium/docs/source/tgsi.rst
src/gallium/include/pipe/p_shader_tokens.h