summaryrefslogtreecommitdiff
path: root/shaderc
diff options
context:
space:
mode:
authorDanny Rawlins <monster.romster@gmail.com>2019-10-12 13:24:55 +1100
committerDanny Rawlins <monster.romster@gmail.com>2019-10-12 13:27:24 +1100
commit1315228fcc410164389699fb8753559eb504ebdc (patch)
treeb5d3b5cbc4a8c6867891bf71e8ad463c563c1145 /shaderc
parent6595e6b67b273fecc27479ae56e3912ef6a34e9b (diff)
downloadcontrib-1315228fcc410164389699fb8753559eb504ebdc.tar.gz
contrib-1315228fcc410164389699fb8753559eb504ebdc.tar.xz
shaderc: fix build-version.inc to include the verison string, install man pages
Diffstat (limited to 'shaderc')
-rw-r--r--shaderc/.footprint5
-rw-r--r--shaderc/.signature10
-rw-r--r--shaderc/Pkgfile26
-rw-r--r--shaderc/glslc-asciidoc.patch8
-rw-r--r--shaderc/glslc.11380
-rw-r--r--shaderc/spvc-asciidoc.patch8
-rw-r--r--shaderc/spvc.194
7 files changed, 1522 insertions, 9 deletions
diff --git a/shaderc/.footprint b/shaderc/.footprint
index f09164f31..6e5306166 100644
--- a/shaderc/.footprint
+++ b/shaderc/.footprint
@@ -17,3 +17,8 @@ drwxr-xr-x root/root usr/lib/pkgconfig/
-rw-r--r-- root/root usr/lib/pkgconfig/shaderc.pc
-rw-r--r-- root/root usr/lib/pkgconfig/shaderc_combined.pc
-rw-r--r-- root/root usr/lib/pkgconfig/shaderc_static.pc
+drwxr-xr-x root/root usr/share/
+drwxr-xr-x root/root usr/share/man/
+drwxr-xr-x root/root usr/share/man/man1/
+-rw-r--r-- root/root usr/share/man/man1/glslc.1.gz
+-rw-r--r-- root/root usr/share/man/man1/spvc.1.gz
diff --git a/shaderc/.signature b/shaderc/.signature
index 6f0d2f260..f8e0aa89a 100644
--- a/shaderc/.signature
+++ b/shaderc/.signature
@@ -1,6 +1,10 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF35V5n4UqYmzeQu4cohZL2/HGcxhTXCLuIPyO0E7cW0OYqKgbPCcVrNd+nqUg8u6pcNHhe/WLfObxrJ2Iw5z0XAY=
-SHA256 (Pkgfile) = c557460679e2cf4efcd5dedb697c7a9f7cb67802bc1e65c0d9e684924e915d41
-SHA256 (.footprint) = 310a6df7168ed6cf5297b487d09e9e1955bfea51d6168129d6184836a5fae87f
+RWSagIOpLGJF3z1T9bLOok7yZ6isgKJrZ7kmIcLzMW8eals1I5qIJr8CE6rhbdolQPsJSscFjqjXTXqj+ViIZyml/vc1dJc3oAU=
+SHA256 (Pkgfile) = 2c6ab00455a37e458ff4aee4004f39c035120645fbb84bab0c15ff0efb461cee
+SHA256 (.footprint) = a55f4db9a8f36310df010a88256abef6d13753f525ff212c4e7dcb390e6c1e66
SHA256 (shaderc-v2019.0.tar.gz) = 1018cd02be52295272fdbffa056ee24b881be277c83d039ad554d91230f4e11b
+SHA256 (glslc.1) = 74007de30e2a7654e399d8c67c03d817eb847112e5d95e407d81754334d333c6
+SHA256 (spvc.1) = a2f1c0158a73556080f2c7a8ae9027aa6c054da88ee3a5bb588bb9514021012d
+SHA256 (glslc-asciidoc.patch) = 685d97223af4fcd169921ee5f9b2c49a2df3d84b7bf7df7dd1f6def4361321a6
+SHA256 (spvc-asciidoc.patch) = fd0c682186be4231fab5c83bf7625678f3b7905c980e3f7c9ae6cd5e212f9563
SHA256 (fix-glslang-link-order.patch) = 986a972d8b8fbfa750e92b750673108c4ae77af47acdc4dbb684358e2600a4ea
diff --git a/shaderc/Pkgfile b/shaderc/Pkgfile
index 5a520b41a..c407cbfcc 100644
--- a/shaderc/Pkgfile
+++ b/shaderc/Pkgfile
@@ -1,24 +1,29 @@
# Description: Collection of tools, libraries and tests for shader compilation.
# URL: https://github.com/google/shaderc
# Maintainer: Danny Rawlins, crux at romster dot me
-# Depends on: glslang ninja
+# Depends on: glslang
+# Optional: asciidoctor
name=shaderc
version=2019.0
-release=1
+release=2
source=(https://github.com/google/$name/archive/v$version/$name-v$version.tar.gz
+ glslc.1 spvc.1 glslc-asciidoc.patch spvc-asciidoc.patch
fix-glslang-link-order.patch)
build() {
cd $name-$version
+ patch -d glslc -p0 -i $SRC/glslc-asciidoc.patch
+ patch -d spvc -p0 -i $SRC/spvc-asciidoc.patch
+
patch -p1 -i $SRC/fix-glslang-link-order.patch
# de-vendor libs and disable git versioning
sed '/examples/d;/third_party/d' -i CMakeLists.txt
sed '/build-version/d' -i glslc/CMakeLists.txt
cat <<- EOF > glslc/src/build-version.inc
-"${pkgver}\\n"
+"${version}\\n"
"$(prt-get info spirv-tools | awk '/^Version:/ {print $2}')\\n"
"$(prt-get info glslang | awk '/^Version:/ {print $2}')\\n"
EOF
@@ -38,7 +43,16 @@ EOF
DESTDIR=$PKG ninja install
- #cd ../glslc
- #asciidoctor -b manpage README.asciidoc -o glslc.1
- #install -D -m 0644 -t $PKG/usr/share/man/man1 glslc/glslc.1
+ if [ -e '/usr/bin/asciidoctor' ]; then
+ cd ../glslc
+ asciidoctor -b manpage README.asciidoc -o glslc.1
+ install -D -m 0644 -t $PKG/usr/share/man/man1 glslc.1
+
+ cd ../spvc
+ asciidoctor -b manpage README.asciidoc -o spvc.1
+ install -D -m 0644 -t $PKG/usr/share/man/man1 spvc.1
+ else
+ install -D -m 0644 -t $PKG/usr/share/man/man1 $SRC/glslc.1
+ install -D -m 0644 -t $PKG/usr/share/man/man1 $SRC/spvc.1
+ fi
}
diff --git a/shaderc/glslc-asciidoc.patch b/shaderc/glslc-asciidoc.patch
new file mode 100644
index 000000000..4f4e24292
--- /dev/null
+++ b/shaderc/glslc-asciidoc.patch
@@ -0,0 +1,8 @@
+--- README.asciidoc.orig 2019-10-12 13:09:08.520937661 +1100
++++ README.asciidoc 2019-10-12 13:07:36.402071472 +1100
+@@ -1,4 +1,4 @@
+-= glslc Manual
++= glslc(1)
+ :toc:
+ :toclevels: 3
+ :numbered:
diff --git a/shaderc/glslc.1 b/shaderc/glslc.1
new file mode 100644
index 000000000..234f8db49
--- /dev/null
+++ b/shaderc/glslc.1
@@ -0,0 +1,1380 @@
+'\" t
+.\" Title: glslc
+.\" Author: [see the "AUTHOR(S)" section]
+.\" Generator: Asciidoctor 2.0.10
+.\" Date: 2019-10-12
+.\" Manual: \ \&
+.\" Source: \ \&
+.\" Language: English
+.\"
+.TH "`GLSLC`" "1" "2019-10-12" "\ \&" "\ \&"
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.ss \n[.ss] 0
+.nh
+.ad l
+.de URL
+\fI\\$2\fP <\\$1>\\$3
+..
+.als MTO URL
+.if \n[.g] \{\
+. mso www.tmac
+. am URL
+. ad l
+. .
+. am MTO
+. ad l
+. .
+. LINKSTYLE blue R < >
+.\}
+.SH "NAME"
+`glslc` \- A command\-line GLSL/HLSL to SPIR\-V compiler with Clang\-compatible arguments.
+.SH "SYNOPSIS"
+.sp
+.if n .RS 4
+.nf
+glslc [\-\-help]
+
+glslc [\-\-show\-limits]
+
+glslc [\-c|\-S|\-E]
+ [\-x ...] [\-std=standard]
+ [ ... options for resource bindings ... ]
+ [\-fhlsl\-offsets]
+ [\-fhlsl\-functionality1]
+ [\-fentry\-point=<name>]
+ [\-fauto\-map\-locations]
+ [\-finvert\-y]
+ [\-flimit=...]
+ [\-flimit\-file <resource\-limits\-file>]
+ [\-fshader\-stage=...]
+ [\-\-target\-env=...]
+ [\-\-target\-spv=...]
+ [\-g]
+ [\-O0|\-Os]
+ [\-Idirectory...]
+ [\-Dmacroname[=value]...]
+ [\-w] [\-Werror]
+ [\-o outfile]
+ shader...
+.fi
+.if n .RE
+.SH "DESCRIPTION"
+.SS "Input file languages"
+.sp
+glslc accepts both GLSL/HLSL source and SPIR\-V assembly files as inputs.
+.SS "Shader stage specification"
+.sp
+glslc provides three ways to specify the shader stage of a GLSL source file:
+\f(CR\-fshader\-stage=<stage>\fP, \f(CR#pragma shader_stage(<stage>)\fP, and file extension.
+The \f(CR\-fshader\-stage=\fP option overrides \f(CR#pragma shader_stage()\fP, which overrides
+the file extension.
+.sp
+Shader stages can be specified by naming a file with an appropriate extension
+as shown in the following table. \f(CR\-fshader\-stage=\fP and \f(CR#pragma shader_stage()\fP,
+on the other hand, enable you to specify shader stages from the command line
+and within the source file. Possible \f(CRstage\fPs for them are also listed in
+the following table. Details about \f(CR\-fshader\-stage=\fP can be found in
+its own section.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table 1. Shader Stage Selection
+.TS
+allbox tab(:);
+lt lt lt.
+T{
+.sp
+Shader Stage
+T}:T{
+.sp
+Shader File Extension
+T}:T{
+.sp
+\f(CR<stage>\fP
+T}
+T{
+.sp
+vertex
+T}:T{
+.sp
+\f(CR.vert\fP
+T}:T{
+.sp
+\f(CRvertex\fP
+T}
+T{
+.sp
+fragment
+T}:T{
+.sp
+\f(CR.frag\fP
+T}:T{
+.sp
+\f(CRfragment\fP
+T}
+T{
+.sp
+tesselation control
+T}:T{
+.sp
+\f(CR.tesc\fP
+T}:T{
+.sp
+\f(CRtesscontrol\fP
+T}
+T{
+.sp
+tesselation evaluation
+T}:T{
+.sp
+\f(CR.tese\fP
+T}:T{
+.sp
+\f(CRtesseval\fP
+T}
+T{
+.sp
+geometry
+T}:T{
+.sp
+\f(CR.geom\fP
+T}:T{
+.sp
+\f(CRgeometry\fP
+T}
+T{
+.sp
+compute
+T}:T{
+.sp
+\f(CR.comp\fP
+T}:T{
+.sp
+\f(CRcompute\fP
+T}
+.TE
+.sp
+.sp
+\f(CR#pragma shader_stage()\fP relies on the \f(CR#pragma\fP preprocessor directive; thus,
+the token inside \f(CRshader_stage()\fP is not subject to preprocessor macro
+expansion. It must be exactly one of the \f(CRstage\fPs in the above table.
+.sp
+\f(CR#pragma shader_stage()\fP behaves as follows:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+The first \f(CR#pragma shader_stage()\fP directive in a translation unit must
+precede any non\-preprocessor tokens.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If there is more than one \f(CR#pragma shader_stage()\fP directive in the same
+translation unit, all the \f(CRstage\fPs specified must be the same. Otherwise,
+glslc will issue an error.
+.RE
+.SS "SPIR\-V assembly files"
+.sp
+SPIR\-V assembly input files should follow the
+\c
+.URL "https://github.com/KhronosGroup/SPIRV\-Tools/blob/master/syntax.md" "syntax"
+defined in the \c
+.URL "https://github.com/KhronosGroup/SPIRV\-Tools" "SPIRV\-Tools"
+project and have the \f(CR.spvasm\fP extension. Command line options treat SPIR\-V
+assembly files differently; some may ignore them, e.g., \f(CR\-E\fP,
+\f(CR\-S\fP, and some may even treat them not as SPIR\-V assembly
+files, e.g., \f(CR\-fshader\-stage=\fP.
+.SS "Output file naming"
+.sp
+If a name is specified via \f(CR\-o\fP, the output file will be given that name.
+Otherwise,
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If a compilation stage selection option is given (\f(CR\-S\fP or \f(CR\-c\fP), there will
+be one output file generated per input shader file. The generated output file
+will end with a file extension that matches the compilation stage, which is
+\f(CR.spvasm\fP for \f(CR\-S\fP and \f(CR.spv\fP for \f(CR\-c\fP. The name will depend on the original
+file\(cqs name and extension.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If the input file has a shader stage selection
+extension, the output file will be named as by appending the file extension
+for the compilation stage to the input file\(cqs name. E.g., \f(CRglslc \-c foo.vert\fP
+will generate \f(CRfoo.vert.spv\fP, and \f(CRglslc \-s bar.frag\fP will generate
+\f(CRbar.frag.spvasm\fP.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+Otherwise, the output file will be named as by replacing the input file\(cqs
+file extension, if any, with the file extension for the compilation stage.
+E.g., \f(CRglslc \-c foo\fP will generate \f(CRfoo.spv\fP, and \f(CRglslc \-s bar.glsl\fP will
+generate \f(CRbar.spvasm\fP.
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If no compilation stage is selected, the output file will be named \f(CRa.spv\fP.
+.RE
+.SH "COMMAND LINE OPTIONS"
+.SS "Overall Options"
+.SS "\f(CR\-\-help\fP"
+.sp
+\f(CR\-\-help\fP tells the glslc compiler to display all available options and exit.
+.SS "\f(CR\-\-show\-limits\fP"
+.sp
+\f(CR\-\-show\-limits\fP shows default resource limits for shader compilation. The syntax
+is the same as accepted by \f(CR\-flimit=\fP and for the contents of the file specified
+by \f(CR\-flimit\-file\fP.
+.SS "\f(CR\-o\fP"
+.sp
+\f(CR\-o\fP lets you specify the output file\(cqs name. It cannot be used when there are
+multiple files generated. A filename of \f(CR\-\fP represents standard output.
+.SS "Language and Mode Selection Options"
+.SS "\f(CR\-finverty\fP"
+.sp
+Inverts position.Y output in a vertex shader.
+.SS "\f(CR\-flimit=\fP"
+.sp
+\f(CR\-flimit=<resource\-limits>\fP lets you specify resource limits.
+The argument should be a sequence of limit name, integer value pairs. Tokens
+should be separated by whitespace. If the same limit is specified several
+times, only the last setting takes effect.
+.sp
+Use \f(CR\-\-show\-limits\fP to show the default values, and example syntax.
+.sp
+This option affects all compiled shaders.
+.SS "\f(CR\-flimit\-file\fP"
+.sp
+\f(CR\-flimit\-file <resource\-limits\-file>\fP lets you specify resource limits in a file.
+The syntax of the file contents is the same as the argument to \f(CR\-flimit=\fP and
+the output of \f(CR\-\-show\-limits\fP. This option accepts Glslang resource configuration
+files, e.g. as emitted by \f(CRglslangValidator \-c\fP.
+.sp
+This option affects all compiled shaders.
+.SS "\f(CR\-fshader\-stage=\fP"
+.sp
+\f(CR\-fshader\-stage=<stage>\fP lets you specify the shader stage for one or more
+inputs from the command line.
+.sp
+Possible values for \f(CR<stage>\fP are listed in the Shader Stage Selection table.
+.sp
+\f(CR\-fshader\-stage=\fP behaves as follows:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-fshader\-stage=\fP sets the shader stage for subsequent input files. It does
+not affect the stages of any preceding inputs on the command line.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+When supplying more than one \f(CR\-fshader\-stage=\fP argument, the most recent
+argument preceding an input file applies.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+A shader file not ending with known shader file
+extensions must have a \f(CR\-fshader\-stage=\fP argument ahead of it to specify
+its stage.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If there is a \f(CR\-fshader\-stage=\fP before a file in which there is a \f(CR#pragma
+shader_stage()\fP directive, the directive is ignored and the \f(CR\-fshader\-stage=\fP
+argument is used instead.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If there is a \f(CR\-fshader\-stage=\fP before a file with a known shader file
+extension, the file extension is ignored and the \f(CR\-fshader\-stage=\fP argument
+is used instead.
+.RE
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Caution
+.ps -1
+.br
+.sp
+\f(CR\-fshader\-stage=\fP overrides file extension; that means it should not
+be used together with SPIR\-V assembly files because glslc will treat the given
+SPIR\-V assembly files as GLSL source code of the given shader stage. If you
+need to supply both SPIR\-V assembly files and \f(CR\-fshader\-stage=\fP on the same
+command line, please put SPIR\-V assembly files ahead of the first
+\f(CR\-fshader\-stage=\fP, since \f(CR\-fshader\-stage=\fP only affects the treatment of
+subsequent files.
+.sp .5v
+.RE
+.SS "\f(CR\-std=\fP"
+.sp
+\f(CR\-std=<value>\fP lets you specify a shader version and profile on the command
+line. \f(CR<value>\fP can be any valid concatenation of a GLSL version number and
+profile, e.g., \f(CR310es\fP, \f(CR450core\fP, etc. The profile can be omitted as allowed by
+GLSL, e.g., \f(CR450\fP.
+.sp
+\f(CR\-std=\fP behaves as follows:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-std=\fP affects the version of all GLSL inputs passed to \f(CRglslc\fP.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-std=\fP is ignored for HLSL inputs.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-std=\fP overwrites \f(CR#version\fP directives in all input shaders, including those
+preceding the argument.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If a \f(CR\-std=\fP argument specifies a different version from a \f(CR#version\fP
+directive in an input file, \f(CRglslc\fP will issue a warning.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+If multiple \f(CR\-std=\fP arguments are specified on the command line, only the last
+one takes effect.
+.RE
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Caution
+.ps -1
+.br
+.sp
+\f(CR\-std=\fP does not affect the \f(CR#version\fP directive in the preprocessed
+output. That is, when \f(CR\-std=\fP specifies a version different from the shader
+source code, the \f(CR#version\fP directive in preprocessed output will still be the
+one in the source code. But \f(CR\-std=\fP does affect the behavior of \f(CR#line\fP
+directives in the preprocessed output. Behavior of \f(CR#line\fP directives will
+follow the version specified by \f(CR\-std=\fP.
+.sp .5v
+.RE
+.SS "\f(CR\-\-target\-env=\fP"
+.sp
+\f(CR\-\-target\-env=<value>\fP lets you specify a target environment on the command line.
+This affects the generation of warnings and errors. The \f(CR<value>\fP can be one of
+the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRvulkan\fP: create SPIR\-V under Vulkan 1.0 semantics.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRvulkan1.0\fP: create SPIR\-V under Vulkan 1.0 semantics.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRvulkan1.1\fP: create SPIR\-V under Vulkan 1.1 semantics.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRopengl\fP: create SPIR\-V under OpenGL 4.5 semantics.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRopengl4.5\fP: create SPIR\-V under OpenGL 4.5 semantics.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRopengl_compat\fP: create SPIR\-V under OpenGL semantics, including compatibility
+profile functions.
+.RE
+.sp
+Generated code uses SPIR\-V 1.0, except that code compiled for Vulkan 1.1 uses SPIR\-V 1.3.
+.sp
+If this option is not specified, a default of \f(CRvulkan1.0\fP is used.
+.SS "\f(CR\-\-target\-spv=\fP"
+.sp
+\f(CR\-\-target\-spv=<value>\fP lets you specify the SPIR\-V version to be used by the generated
+module. The default is to use the highest version of SPIR\-V required to be supported
+by the target environment. For example, the default is SPIR\-V 1.0 for Vulkan 1.0, and
+and SPIR\-V 1.3 for Vulkan 1.1.
+.sp
+The \f(CR<value>\fP can be one of the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRspv1.0\fP
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRspv1.1\fP
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRspv1.2\fP
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRspv1.3\fP
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CRspv1.4\fP
+.RE
+.SS "\f(CR\-x\fP"
+.sp
+\f(CR\-x\fP lets you specify the language of the input shader files. Valid languages
+are \f(CRglsl\fP and \f(CRhlsl\fP. If the file extension is \f(CRhlsl\fP then the default language
+is HLSL. Otherwise the default is \(aqglsl\(aq.
+.sp
+Note: HLSL compilation will use HLSL packing (offset) rules for variables
+that are vertex shader outputs, and inputs and outputs of both geometry
+and pixel shaders.
+.SS "Compilation Stage Selection Options"
+.SS "\f(CR\-c\fP"
+.sp
+\f(CR\-c\fP tells the glslc compiler to run the preprocessing and compiling stage.
+Each input shader file results in a SPIR\-V binary file; these SPIR\-V binary
+files are named by the rules in the Output File Naming
+section.
+.SS "\f(CR\-E\fP"
+.sp
+\f(CR\-E\fP tells the glslc compiler to run only the preprocessing stage. It overrides
+\f(CR\-c\fP and \f(CR\-S\fP. Preprocessed output is written to standard output, while
+preprocessing errors are written to standard error. If multiple input shader
+files are given, their preprocessed output are all written to standard output,
+in the order specified on the command line.
+.sp
+glslc will do nothing for SPIR\-V assembly files with this option.
+.SS "\f(CR\-S\fP"
+.sp
+\f(CR\-S\fP tells the glslc compiler to run the preprocessing, compiling, and then
+disassembling stage. It overrides \f(CR\-c\fP. Each input shader file results in a
+SPIR\-V assembly file; these SPIR\-V assembly files are named by the rules in the
+Output File Naming section.
+.sp
+glslc will do nothing for SPIR\-V assembly files with this option.
+.SS "No Compilation Stage Selection"
+.sp
+If none of the above options is given, the glslc compiler will run
+preprocessing, compiling, and linking stages.
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Warning
+.ps -1
+.br
+.sp
+Linking of multiple input shader files are not supported yet.
+.sp .5v
+.RE
+.SS "Preprocessor Options"
+.SS "\f(CR\-D\fP"
+.sp
+\f(CR\-Dmacroname[=[value]]\fP lets you define a preprocessor macro before input shader
+files are preprocessed. If \f(CRvalue\fP is omitted, the macro is defined with an
+empty value.
+.SS "\f(CR\-I\fP"
+.sp
+\f(CR\-Idirectory\fP or \f(CR\-I directory\fP adds the specified directory to the search path
+for include files. The directory may be an absolute path or a relative path to
+the current working directory.
+.SS "Code Generation Options"
+.SS "\f(CR\-g\fP"
+.sp
+Requests that the compiler place source\-level debug information into the object
+code, such as identifier names and line numbers.
+.sp
+This option restrains \f(CR\-O\fP from turning on the strip\-debug\-info optimization
+pass.
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Note
+.ps -1
+.br
+.sp
+Currently this option has no effect. Full functionality depends on
+glslang support for generating debug info.
+.sp .5v
+.RE
+.SS "\f(CR\-O0\fP, \f(CR\-Os\fP"
+.sp
+\f(CR\-O\fP specifies which optimization level to use:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-O0\fP means "no optimization". This level generates the most debuggable code.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-O\fP means the default optimization level for better performance.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+\f(CR\-Os\fP enables optimizations to reduce code size.
+.RE
+.SS "\f(CR\-mfmt=<format>\fP"
+.sp
+\f(CR\-mfmt=<format>\fP selects output format for compilation output in SPIR\-V binary
+code form. Supported options are listed in the
+binary output format options table. This
+option is only valid to be used when the compilation output is SPIR\-V binary
+code. Specifying any options listed below when the output is not SPIR\-V binary
+code, like disassembly (with \f(CR\-S\fP specified), text (with \f(CR\-M\fP, \f(CR\-MM\fP or \f(CR\-E\fP
+specified) will trigger an error.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table 2. Binary Output Format Options
+.TS
+allbox tab(:);
+lt lt.
+T{
+.sp
+Format option
+T}:T{
+.sp
+Description
+T}
+T{
+.sp
+bin
+T}:T{
+.sp
+Output SPIR\-V binary code as a sequence of binary 32\-bitwords
+in host native endianness. This is the default format for
+SPIR\-V binary compilation output.
+T}
+T{
+.sp
+num
+T}:T{
+.sp
+Output SPIR\-V binary code as a text file containing a list of
+comma\-separated hex numbers.
+.br
+Example: \f(CRglslc \-c \-mfmt=num main.vert \-o output_file.txt\fP
+.br
+Content of the output_file.txt:
+.br
+0x07230203,0x00010000,0x00080001,0x00000006...
+T}
+T{
+.sp
+c
+T}:T{
+.sp
+Output SPIR\-V binary code as a text file containing C\-style
+.br
+initializer list.
+.br
+This is just wrapping the output of \f(CRnum\fP option with curly
+brackets.
+.br
+Example: \f(CRglslc \-c \-mfmt=c main.vert \-o output_file.txt\fP
+.br
+Content of output_file.txt:
+.br
+{0x07230203, 0x00010000, 0x00080001, 0x00000006...}
+T}
+.TE
+.sp
+.SS "\f(CR\-fhlsl\-offsets\fP"
+.sp
+Use HLSL packing rules instead of GLSL rules when determining offsets of
+members of blocks. This option is always on when compiling for HLSL.
+.SS "\f(CR\-fhlsl\-functionality1\fP"
+.sp
+Enable extension \f(CRSPV_GOOGLE_hlsl_functionality1\fP, and instructs the compiler
+to:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+Annotate HLSL semantic string decorations on interface objects
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+Explicitly record the association of a UAV resource with its companion counter buffer.
+.RE
+.sp
+This option can also be spelled with an underscore: \f(CR\-fhlsl_functionality1\fP.
+.SS "\f(CR\-fentry\-point=<name>\fP"
+.sp
+\f(CR\-fentry\-point=<name>\fP lets you specify the entry point name. This is only
+significant for HLSL compilation. The default is "main".
+.SS "\f(CR\-fauto\-map\-locations\fP"
+.sp
+For GLSL compilation, option \f(CR\-fauto\-map\-locations\fP directs the compiler to automatically
+assign location numbers to user\-defined stage input and output variables if not explicitly
+specified by the shader source.
+.sp
+For HLSL compilation, this option is on by default.
+.sp
+Client APIs normally require adjacent stages to agree on their I/O interface.
+The compiler only sees one stage at a time, so it is strongly recommended that
+you avoid relying on this option to assign locations.
+.sp
+Instead, an explicit binding number should be specified in the shader source, as follows:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+In a GLSL shader, use a \f(CRlocation\fP layout qualifier:
+.RE
+.sp
+.if n .RS 4
+.nf
+layout(location = 1) in vec4 x;
+.fi
+.if n .RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+In an HLSL shader, use a \f(CRvk::location\fP attribute:
+.RE
+.sp
+.if n .RS 4
+.nf
+[[vk::location(1)]] float4 FooShader(
+ [[vk::location(0)]] float4 a,
+ [[vk::location(2)]] float4 b) : COLOR0 {
+ return a + b;
+}
+.fi
+.if n .RE
+.SS "Warning and Error Options"
+.SS "\f(CR\-w\fP"
+.sp
+\f(CR\-w\fP suppresses all warning output from \f(CRglslc\fP. Any warning that would have
+been generated is silently ignored.
+.SS "\f(CR\-Werror\fP"
+.sp
+\f(CR\-Werror\fP forces any warning to be treated as an error in \f(CRglslc\fP. This means
+that all \f(CRwarning:\fP messages are shown as \f(CRerror:\fP and any warnings will cause
+a non\-zero exit code from \f(CRglslc\fP. If \f(CR\-w\fP is specified the warnings
+generated are suppressed before they are converted to errors.
+.SS "Dependency Generation Options"
+.SS "\f(CR\-M\fP or \f(CR\-MM\fP"
+.sp
+\f(CR\-M\fP generates \fBmake\fP dependencies. It outputs a rule suitable for \fBmake\fP
+describing the dependencies of the input file. Instead of outputting the result
+of preprocessing, the preprocessor outputs one \fBmake\fP rule containing the
+SPIR\-V object file name for that source file, a colon, and the names of all the
+included files.
+.sp
+Unless specified explicitly (with \f(CR\-MT\fP), the SPIR\-V object file name in the
+generated \fBmake\fP rules follows the rules of Output File
+Naming as in \f(CR\-c\fP compilation stage.
+.sp
+Specifying \f(CR\-M\fP implies \f(CR\-E\fP, and suppresses warnings with an implicit \f(CR\-w\fP.
+By default the output will be written to stdout, unless \f(CR\-MF\fP or \f(CR\-o\fP is
+specified.
+.sp
+The dependency info file name can be specified by \f(CR\-o\fP and \f(CR\-MF\fP options. When
+both are specified, \f(CR\-o\fP option is ignored.
+.sp
+Specifying multiple input files is valid when the \fBmake\fP rules are written to
+stdout, which means neither \f(CR\-MF\fP nor \f(CR\-o\fP is specified. When \f(CR\-o\fP or \f(CR\-MF\fP is
+specified, only one input file is allowed.
+.sp
+\f(CR\-MM\fP is an alias for \f(CR\-M\fP.
+.sp
+E.g., \f(CRglslc \-M main.vert\fP will dump \f(CRmain.vert.spv: main.vert <other included
+files>\fP to stdout. More examples are listed in
+Dependency Generation Examples
+.SS "\f(CR\-MD\fP"
+.sp
+\f(CR\-MD\fP tells the glslc compiler to both compile the source and generate \fBmake\fP
+dependencies. Dependencies are written to a file whose name is determined as
+follows: If option \f(CR\-MF\fP is specified, use its argument. Otherwise, use the
+filename formed by appending \fB.d\fP to the name of the file containing
+compilation results.
+.sp
+Specifying multiple input files is valid when neither \f(CR\-MF\fP nor \f(CR\-o\fP is
+specified. When \f(CR\-o\fP or \f(CR\-MF\fP is specified, only one input file is allowed.
+.sp
+E.g., \f(CRglslc \-c \-MD main.vert\fP will generate \f(CRmain.vert.spv\fP as the SPIR\-V
+object file and \f(CRmain.vert.spv.d\fP as the dependency info file. More examples
+are listed in Dependency Generation Examples
+.SS "\f(CR\-MF\fP"
+.sp
+\f(CR\-MF\fP lets you specify the dependency info file name when used with \f(CR\-M\fP or
+\f(CR\-MD\fP. This option is invalid when used with multiple input files.
+.sp
+E.g., \f(CRglslc \-c \-MD main.vert \-MF dep_info\fP will generate \f(CRmain.vert.spv\fP as
+the SPIR\-V object file and \f(CRdep_info\fP as the dependency info file.
+.SS "\f(CR\-MT\fP"
+.sp
+\f(CR\-MT\fP lets you specify the target of the rule emitted by dependency generation
+when used with \f(CR\-M\fP or \f(CR\-MD\fP. This option is invalid when used with multiple
+input files.
+.sp
+E.g., \f(CRglslc \-M main.vert \-MT target\fP will dump following dependency info to
+stdout: \f(CRtarget: main.vert <other dependent files>\fP.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table 3. Dependency Generation Examples
+.TS
+allbox tab(:);
+lt lt lt lt.
+T{
+.sp
+Command Line Input
+T}:T{
+.sp
+Compilation Output File
+T}:T{
+.sp
+Dependency Output File
+T}:T{
+.sp
+Dependency Info
+T}
+T{
+.sp
+glslc \-M main.vert
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+<Stdout>
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-M a.vert b.vert
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+<Stdout>
+T}:T{
+.sp
+a.vert.spv: a.vert
+T}
+T{
+.sp
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+<Stdout>
+T}:T{
+.sp
+b.vert.spv: b.vert
+T}
+T{
+.sp
+glslc \-M main.vert \-o dep_info
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+dep_info
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-M main.vert \-MF dep_info
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+dep_info
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-M main.vert \-MT target
+T}:T{
+.sp
+<NA>
+T}:T{
+.sp
+<Stdout>
+T}:T{
+.sp
+target: main.vert
+T}
+T{
+.sp
+glslc \-MD main.vert
+T}:T{
+.sp
+a.spv
+T}:T{
+.sp
+main.vert.spv.d
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-c \-MD main.vert
+T}:T{
+.sp
+main.vert.spv
+T}:T{
+.sp
+main.vert.spv.d
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-c \-MD a.vert b.vert
+T}:T{
+.sp
+a.vert.spv
+T}:T{
+.sp
+a.vert.spv.d
+T}:T{
+.sp
+a.vert.spv: a.vert
+T}
+T{
+.sp
+T}:T{
+.sp
+b.vert.spv
+T}:T{
+.sp
+b.vert.spv.d
+T}:T{
+.sp
+b.vert.spv: b.vert
+T}
+T{
+.sp
+glslc \-S \-MD main.vert
+T}:T{
+.sp
+main.vert.spvasm
+T}:T{
+.sp
+main.vert.spvasm.d
+T}:T{
+.sp
+main.vert.spvasm: main.vert
+T}
+T{
+.sp
+glslc \-c \-MD main.vert \-MF dep_info
+T}:T{
+.sp
+main.vert.spv
+T}:T{
+.sp
+dep_info
+T}:T{
+.sp
+main.vert.spv: main.vert
+T}
+T{
+.sp
+glslc \-c \-MD main.vert \-o obj
+T}:T{
+.sp
+obj
+T}:T{
+.sp
+obj.d
+T}:T{
+.sp
+obj: main.vert
+T}
+T{
+.sp
+glslc \-c \-MD main.vert \-o obj \-MF dep_info \-MT target
+T}:T{
+.sp
+obj
+T}:T{
+.sp
+dep_info
+T}:T{
+.sp
+target: main.vert
+T}
+.TE
+.sp
+.SS "Resource Binding Options"
+.SS "\f(CR\-fauto\-bind\-uniforms\fP"
+.sp
+Option \f(CR\-fauto\-bind\-uniforms\fP directs the compiler to automatically assign
+binding numbers to uniform variables, when an explicit binding is not
+specified in the shader source.
+.sp
+An explicit binding number can be specified in the shader source by using
+a \f(CRbinding\fP layout qualifier. For example:
+.sp
+.if n .RS 4
+.nf
+layout(binding = 12) uniform texture2D;
+.fi
+.if n .RE
+.SS "\f(CR\-fhlsl\-iomap\fP"
+.sp
+Option \f(CR\-fhlsl\-iomap\fP directs the compiler to use HLSL register
+assignments as binding values.
+.SS "\f(CR\-fimage\-binding\-base\fP"
+.sp
+Option \f(CR\-fimage\-binding\-base [stage] base\fP sets the lowest automatically
+assigned binding for images. If a stage is specified, only affects the specified
+stage.
+.sp
+For HLSL, sets one less than the base.
+.SS "\f(CR\-fsampler\-binding\-base\fP"
+.sp
+Option \f(CR\-fsampler\-binding\-base [stage] base\fP sets the lowest automatically
+assigned binding for samplers. If a stage is specified, only affects the specified
+stage.
+.sp
+For HLSL, sets one less than the base.
+.SS "\f(CR\-ftexture\-binding\-base\fP"
+.sp
+Option \f(CR\-ftexture\-binding\-base [stage] base\fP sets the lowest automatically
+assigned binding for textures. If a stage is specified, only affects the specified
+stage.
+.sp
+For HLSL, sets one less than the base.
+.SS "\f(CR\-fubo\-binding\-base\fP"
+.sp
+Option \f(CR\-fubo\-binding\-base [stage] base\fP sets the lowest automatically
+assigned binding for Uniform Buffer Objects (GLSL) or Cbuffers (HLSL).
+If a stage is specified, only affects the specified stage.
+.sp
+For HLSL, sets one less than the base.
+.SS "\f(CR\-fcbuffer\-binding\-base\fP"
+.sp
+Option \f(CR\-fcbuffer\-binding\-base [stage] base\fP is the same as
+\f(CR\-fubo\-binding\-base [stage] base\fP.
+.SS "\f(CR\-fssbo\-binding\-base\fP"
+.sp
+Option \f(CR\-fssbo\-binding\-base [stage] base\fP sets the lowest automatically
+assigned binding for Shader Storage Buffer Objects (GLSL).
+If a stage is specified, only affects the specified stage.
+.sp
+This only affects GLSL compilation.
+.SS "\f(CR\-fuav\-binding\-base\fP"
+.sp
+Option \f(CR\-fuav\-binding\-base [stage] base\fP sets one less than the lowest
+automatically assigned binding for Unordered Access Views (UAV).
+If a stage is specified, only affects the specified stage.
+.sp
+This only affects HLSL compilation.
+.SS "\f(CR\-fresource\-set\-binding\fP"
+.sp
+Option \f(CR\-fresource\-set\-binding [stage] <reg0> <set0> <binding0>\fP sets
+the descriptor set and binding for an HLSL resource, by register name.
+To specify settings for more registers, append their triples consisting
+of register name, descriptor set, and binding.
+.sp
+Example:
+.sp
+.if n .RS 4
+.nf
+# For a texture in register t1, use set 1 binding 0.
+# For a texture in register t2, use set 1 binding 3
+glslc \-x hlsl foo.frag \-fresource\-set\-binding t1 1 0 t2 1 3
+.fi
+.if n .RE
+.sp
+If a stage is specified, only affects the specified stage.
+.sp
+.if n .RS 4
+.nf
+# Same as the previous example, but the settings only apply
+# to fragment (pixel) shaders.
+glslc \-x hlsl foo.frag \-fresource\-set\-binding frag t1 1 0 t2 1 3
+.fi
+.if n .RE
+.SH "DIVERGENCE FROM AND EXTENSIONS TO GLSL SPECIFICATIONS"
+.SS "Source\-filename\-based \f(CR#line\fP and \f(CR__FILE__\fP"
+.sp
+This section describes how the glslc compiler extends the syntax for the \f(CR#line\fP
+directive and the \f(CR__FILE__\fP macro. By default, the glslc compiler enables
+the \f(CRGL_GOOGLE_cpp_style_line_directive\fP extension. It will generate this
+extended syntax in the preprocessed output (obtained via the \f(CR\-E\fP option).
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Warning
+.ps -1
+.br
+.sp
+This section is still evolving. Expect changes.
+.sp .5v
+.RE
+.sp
+GLSL specifications have a notion of source strings.
+.RS 3
+.ll -.6i
+.sp
+The source for a single shader is an array of strings of characters from the
+character set. A single shader is made from the concatenation of these strings.
+.br
+.RE
+.ll
+.RS 5
+.ll -.10i
+\(em Section 3.2 of both version 3.30 and 4.50
+.RE
+.ll
+.sp
+With the above notion, the second parameter to the \f(CR#line\fP directive should
+be a constant integer expressions representing the source string number. Also
+the \f(CR__FILE__\fP macro will "substitute a decimal integer constant that says
+which source string number is currently being processed."
+.sp
+The glslc compiler implements the standard \f(CR#line\fP and \f(CR__FILE__\fP syntax. It
+also provides an extension, \f(CRGL_GOOGLE_cpp_style_line_directive\fP, to allow
+source filenames to be used instead of integer source string indices.
+Specifically, the \f(CR#line\fP directive can have, after macro substitution, one of
+the following three forms:
+.sp
+.if n .RS 4
+.nf
+#line line\-number
+#line line\-number integer\-source\-string\-index
+#line line\-number "source\-filename"
+.fi
+.if n .RE
+.sp
+where \f(CRsource\-filename\fP can be any combinations of characters except double
+quotation marks. (Note that according to the GLSL specification, "there are
+no escape sequences or other uses of the backslash beyond use as the
+line\-continuation character".)
+.sp
+And if source\-filename\-based \f(CR#line\fP is used, the \f(CR__FILE__\fP macro expands to
+a string whose contents are the filename quoted with double quotation marks.
+The filename is dertermined as the last of
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+The filename given to the glslc compiler,
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+The filename argument of the most recent \f(CR#line\fP directive, if any.
+.RE
+.SS "\f(CR#include\fP"
+.sp
+The glslc compiler extends GLSL with the include syntax by turning on the
+\f(CRGL_GOOGLE_include_directive\fP extension. It will preprocess and substitute
+\f(CR#include\fP directives properly with the following behaviors.
+.if n .sp
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+.B Warning
+.ps -1
+.br
+.sp
+This section is still evolving. Expect changes.
+.sp .5v
+.RE
+.sp
+If \f(CR#include\fP directives are used in a shader, there will be an \f(CR#extension
+GL_GOOGLE_include_directive : enable\fP line generated into the preprocessed
+output.
+.sp
+The \f(CRGL_GOOGLE_cpp_style_line_directive\fP extension is implicitly turned on by
+the \f(CRGL_GOOGLE_include_directive\fP extension.
+.sp
+The file argument to \f(CR#include\fP must be enclosed in double quotes. It must be a
+relative path, using whatever path separator the OS supports. However, the last
+path element \(em the name of the file itself \(em must not contain either \(aq/\(aq or
+\(aq\(rs\(aq, regardless of which path separator is used. This will not be flagged as an
+error but will instead trigger undefined behavior. For example, let\(cqs say there
+is a file named \f(CRf\(rsilename.vert\fP on a Unix OS. It is not possible to craft a
+\f(CR#include\fP that includes that file.
+.sp
+Furthermore, it is not possible to escape any characters in a \f(CR#include\fP
+directive, so the file argument cannot contain any special characters that need
+escaping in C.
+.sp
+The file argument is a relative path that is matched first against the including
+file\(cqs own directory and then against all \f(CR\-I\fP arguments in order of their
+appearance on the command line. If the file cannot be found, \f(CRglslc\fP aborts
+with an error. \ No newline at end of file
diff --git a/shaderc/spvc-asciidoc.patch b/shaderc/spvc-asciidoc.patch
new file mode 100644
index 000000000..5b17b6e38
--- /dev/null
+++ b/shaderc/spvc-asciidoc.patch
@@ -0,0 +1,8 @@
+--- README.asciidoc.orig 2019-10-12 13:12:51.338188365 +1100
++++ README.asciidoc 2019-10-12 13:13:14.557901897 +1100
+@@ -1,4 +1,4 @@
+-= spvc Manual
++= spvc(1)
+ :toc:
+ :toclevels: 3
+ :numbered:
diff --git a/shaderc/spvc.1 b/shaderc/spvc.1
new file mode 100644
index 000000000..c923f75a0
--- /dev/null
+++ b/shaderc/spvc.1
@@ -0,0 +1,94 @@
+'\" t
+.\" Title: spvc
+.\" Author: [see the "AUTHOR(S)" section]
+.\" Generator: Asciidoctor 2.0.10
+.\" Date: 2019-10-12
+.\" Manual: \ \&
+.\" Source: \ \&
+.\" Language: English
+.\"
+.TH "`SPVC`" "1" "2019-10-12" "\ \&" "\ \&"
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.ss \n[.ss] 0
+.nh
+.ad l
+.de URL
+\fI\\$2\fP <\\$1>\\$3
+..
+.als MTO URL
+.if \n[.g] \{\
+. mso www.tmac
+. am URL
+. ad l
+. .
+. am MTO
+. ad l
+. .
+. LINKSTYLE blue R < >
+.\}
+.SH "NAME"
+`spvc` \- A validating SPIR\-V to GLSL/HLSL/MSL compiler with Clang\-compatible options.
+.SH "SYNOPSIS"
+.sp
+.if n .RS 4
+.nf
+spvc [\-\-help]
+
+spvc [\-\-version]
+ [\-\-validate=<target env>]
+ [\-o outfile]
+ shader...
+.fi
+.if n .RE
+.SH "DESCRIPTION"
+.sp
+\f(CRspvc\fP is a wrapper around SPIRV\-Cross.
+A SPIR\-V module must pass validation before it is given to SPIRV\-Cross for translation.
+.SS "Input file languages"
+.sp
+Spvc accepts SPIR\-V binary files as input.
+.SS "Output file naming"
+.sp
+If a name is specified via \f(CR\-o\fP, the output file will be given that name.
+Otherwise the output file name is the same as the input file name except
+with a \f(CR.glsl,\fP \f(CR.hlsl\fP or \f(CR.msl\fP extension, as appropriate.
+.SH "COMMAND LINE OPTIONS"
+.SS "Overall Options"
+.SS "\f(CR\-\-help\fP"
+.sp
+\f(CR\-\-help\fP tells the spvc compiler to display all available options and exit.
+.SS "\f(CR\-\-version\fP"
+.sp
+\f(CR\-\-version\fP displays version information.
+.SS "\f(CR\-\-validate=<source env>\fP"
+.sp
+\f(CR\-\-validate\fP validates the input with the given environment, which is one of:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+vulkan1.0
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+. sp -1
+. IP \(bu 2.3
+.\}
+vulkan1.1
+.RE
+.sp
+The default is \f(CRvulkan1.0\fP.
+.SS "\f(CR\-o\fP"
+.sp
+\f(CR\-o\fP lets you specify the output file\(cqs name. It cannot be used when there are
+multiple files generated. A filename of \f(CR\-\fP represents standard output. \ No newline at end of file

Generated by cgit