
VERSION
--------------------------------------------------------------------------------
spirv-remap 0.97

INTRO:
--------------------------------------------------------------------------------
spirv-remap is a utility to improve compression of SPIR-V binary files via
entropy reduction, plus optional stripping of debug information and
load/store optimization.  It transforms SPIR-V to SPIR-V, remapping IDs.  The
resulting modules have an increased ID range (IDs are not as tightly packed
around zero), but will compress better when multiple modules are compressed
together, since compressor's dictionary can find better cross module
commonality.

Remapping is accomplished via canonicalization.  Thus, modules can be
compressed one at a time with no loss of quality relative to operating on
many modules at once.  The command line tool operates on multiple modules
only in the trivial repetition sense, for ease of use.  The remapper API
only accepts a single module at a time.

There are two modes of use: command line, and a C++11 API.  Both are
described below.

spirv-remap is currently in an alpha state.  Although there are no known
remapping defects, it has only been exercised on one real world game shader
workload.


FEEDBACK
--------------------------------------------------------------------------------
Report defects, enhancements requests, code improvements, etc to:
   spvremapper@lunarg.com


COMMAND LINE USAGE:
--------------------------------------------------------------------------------
Examples are given with a verbosity of one (-v), but more verbosity can be
had via -vv, -vvv, etc, or an integer parameter to --verbose, such as
"--verbose 4".  With no verbosity, the command is silent and returns 0 on
success, and a positive integer error on failure.

Pre-built binaries for several OSs are available.  Examples presented are
for Linux.  Command line arguments can be provided in any order.

1. Basic ID remapping

Perform ID remapping on all shaders in "*.spv", writing new files with
the same basenames to /tmp/out_dir.

  spirv-remap -v --map all --input *.spv --output /tmp/out_dir

2. Perform all possible size reductions

  spirv-remap-linux-64 -v --do-everything --input *.spv --output /tmp/out_dir

Note that --do-everything is a synonym for:

  --map all --dce all --opt all --strip all

API USAGE:
--------------------------------------------------------------------------------

The public interface to the remapper is defined in SPIRV/SPVRemapper.h as follows:

namespace spv {

class spirvbin_t
{
public:
   enum Options { ... };
   spirvbin_t(int verbose = 0);  // construct

   // remap an existing binary in memory
   void remap(std::vector<std::uint32_t>& spv, std::uint32_t opts = DO_EVERYTHING);

   // Type for error/log handler functions
   typedef std::function<void(const std::string&)> errorfn_t;
   typedef std::function<void(const std::string&)> logfn_t;

   // Register error/log handling functions (can be c/c++ fn, lambda fn, or functor)
   static void registerErrorHandler(errorfn_t handler) { errorHandler = handler; }
   static void registerLogHandler(logfn_t handler)     { logHandler   = handler; }
};

} // namespace spv

The class definition is in SPVRemapper.cpp.

remap() accepts an std::vector of SPIR-V words, modifies them per the
request given in 'opts', and leaves the 'spv' container with the result.
It is safe to instantiate one spirvbin_t per thread and process a different
SPIR-V in each.

The "opts" parameter to remap() accepts a bit mask of desired remapping
options.  See REMAPPING AND OPTIMIZATION OPTIONS.

On error, the function supplied to registerErrorHandler() will be invoked.
This can be a standard C/C++ function, a lambda function, or a functor.
The default handler simply calls exit(5); The error handler is a static
members, so need only be set up once, not once per spirvbin_t instance.

Log messages are supplied to registerLogHandler().  By default, log
messages are eaten silently.  The log handler is also a static member.

BUILD DEPENDENCIES:
--------------------------------------------------------------------------------
 1. C++11 compatible compiler
 2. cmake
 3. glslang


BUILDING
--------------------------------------------------------------------------------
The standalone remapper is built along side glslangValidator through its
normal build process.


REMAPPING AND OPTIMIZATION OPTIONS
--------------------------------------------------------------------------------
API:
   These are bits defined under spv::spirvbin_t::, and can be
   bitwise or-ed together as desired.

   MAP_TYPES      = canonicalize type IDs
   MAP_NAMES      = canonicalize named data
   MAP_FUNCS      = canonicalize function bodies
   DCE_FUNCS      = remove dead functions
   DCE_VARS       = remove dead variables
   DCE_TYPES      = remove dead types
   OPT_LOADSTORE  = optimize unneeded load/stores
   MAP_ALL        = (MAP_TYPES | MAP_NAMES | MAP_FUNCS)
   DCE_ALL        = (DCE_FUNCS | DCE_VARS | DCE_TYPES)
   OPT_ALL        = (OPT_LOADSTORE)
   ALL_BUT_STRIP  = (MAP_ALL | DCE_ALL | OPT_ALL)
   DO_EVERYTHING  = (STRIP | ALL_BUT_STRIP)

